假设我使用
我随后收到以下标头的响应:
我再次执行程序,这一次得到了200 OK的返回。一切都好。
如果我使用 Fiddler 检查请求,我会发现
我的问题是:
关于
引用:
非常感谢您提供任何有关此问题的见解!
HttpClient
发送一个请求到受保护的端点,代码如下:var httpClient = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "url");
var response = await httpClient.SendAsync(request);
我随后收到以下标头的响应:
HTTP/1.1 401 Unauthorized
Content-Type: text/html
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
WWW-Authenticate: Basic
Date ...
从响应头中,我看到可以通过三种不同的方式与服务器进行身份验证(Negotiate、NTLM和Basic)。然后,我将我的代码更新为:
var httpClientHandler = new HttpClientHandler
{
Credentials = new NetworkCredential
{
UserName = "username",
Password = "password"
}
};
var httpClient = new HttpClient(httpClientHandler);
var request = new HttpRequestMessage(HttpMethod.Get, "url");
var response = await httpClient.SendAsync(request);
我再次执行程序,这一次得到了200 OK的返回。一切都好。
如果我使用 Fiddler 检查请求,我会发现
HttpClient
决定使用“Negotiate”作为身份验证方法。我的问题是:
HttpClient
如何决定使用哪种身份验证类型?它是否对某些身份验证类型有优先顺序?关于
NetworkCredential
的文档指出:引用:
NetworkCredential 类是一个基类,用于提供基于密码的身份验证方案(如基本身份验证、摘要身份验证、NTLM 和 Kerberos)中的凭据。
因此,我知道我提供的凭据可以应用于所有三种身份验证类型,但我至今仍未能弄清它如何 / 为什么选择特定的身份验证类型。非常感谢您提供任何有关此问题的见解!