.Net Core HttpClient 摘要认证
.Net Core HttpClient Digest Authentication
在 .Net Core 3.1 应用程序中使用 Mongo Atlas API,但我无法 HttpClient
处理摘要式身份验证的挑战。
代码发送第一个请求,得到 401 响应,然后没有通过正确的身份验证重新发送。
下面是我一直在努力工作的代码
var domain = "https://cloud.mongodb.com/";
var credCache = new CredentialCache();
credCache.Add(new Uri(domain),"Digest", new NetworkCredential(user,secret));
var httpClient = new HttpClient( new HttpClientHandler { Credentials = credCache});
var answer = await httpClient.GetAsync(new Uri($"{domain}api/atlas/v1.0/groups/{groupId}/databaseUsers"));
这是我收到的回复
StatusCode: 401, ReasonPhrase: 'Unauthorized', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, Headers:
{
Date: Mon, 27 Jan 2020 21:03:14 GMT
WWW-Authenticate: Digest realm="MMS Public API", domain="", nonce="generatedNonce", algorithm=MD5, qop="auth", stale=false
Content-Type: application/json
Content-Length: 106
}
我已成功发送 curl 请求,所以我确定我的 user/secret/group 是正确的。
有没有人发现该代码有问题,或者知道我可以做些什么来进一步调试这个问题?
显然我们遇到了完全相同的问题,或者至少在我的同事找到解决方案之前我遇到过。
在 2.1 中对 HttpClient 内部进行了很多更改以支持新的 SocketsHttpHandler,使用这行代码返回到 2.0 功能并且它应该再次工作,将它放在 Main
或之前的某个地方您正在拨打的电话。
AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);
否则你必须先发送一个请求得到 401
响应从 WwwAuthenticate
header 中获取 nonce
并且你可能还需要设置一些header.
中的更多字段
干杯!
在 reddit 上的 post 中找到它:https://www.reddit.com/r/dotnet/comments/9yailz/weird_dotnet_core_httpclient_bug_maybe/ea07edd/
在 .Net Core 3.1 应用程序中使用 Mongo Atlas API,但我无法 HttpClient
处理摘要式身份验证的挑战。
代码发送第一个请求,得到 401 响应,然后没有通过正确的身份验证重新发送。
下面是我一直在努力工作的代码
var domain = "https://cloud.mongodb.com/";
var credCache = new CredentialCache();
credCache.Add(new Uri(domain),"Digest", new NetworkCredential(user,secret));
var httpClient = new HttpClient( new HttpClientHandler { Credentials = credCache});
var answer = await httpClient.GetAsync(new Uri($"{domain}api/atlas/v1.0/groups/{groupId}/databaseUsers"));
这是我收到的回复
StatusCode: 401, ReasonPhrase: 'Unauthorized', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, Headers:
{
Date: Mon, 27 Jan 2020 21:03:14 GMT
WWW-Authenticate: Digest realm="MMS Public API", domain="", nonce="generatedNonce", algorithm=MD5, qop="auth", stale=false
Content-Type: application/json
Content-Length: 106
}
我已成功发送 curl 请求,所以我确定我的 user/secret/group 是正确的。
有没有人发现该代码有问题,或者知道我可以做些什么来进一步调试这个问题?
显然我们遇到了完全相同的问题,或者至少在我的同事找到解决方案之前我遇到过。
在 2.1 中对 HttpClient 内部进行了很多更改以支持新的 SocketsHttpHandler,使用这行代码返回到 2.0 功能并且它应该再次工作,将它放在 Main
或之前的某个地方您正在拨打的电话。
AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);
否则你必须先发送一个请求得到 401
响应从 WwwAuthenticate
header 中获取 nonce
并且你可能还需要设置一些header.
干杯!
在 reddit 上的 post 中找到它:https://www.reddit.com/r/dotnet/comments/9yailz/weird_dotnet_core_httpclient_bug_maybe/ea07edd/