首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >System.Net.Http.HttpClient如何选择身份验证类型?

System.Net.Http.HttpClient如何选择身份验证类型?
EN

Stack Overflow用户
提问于 2019-05-17 07:59:05
回答 1查看 1.3K关注 0票数 6

假设我更新了HttpClient并向受保护的端点发送请求,如下所示:

代码语言:javascript
运行
复制
var httpClient = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "url");
var response = await httpClient.SendAsync(request);

然后,我得到一个具有以下标题的响应:

代码语言:javascript
运行
复制
HTTP/1.1 401 Unauthorized
Content-Type: text/html
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
WWW-Authenticate: Basic
Date ...

从响应头中,我看到我有三个不同的选项可以与服务器进行身份验证(协商、NTLM、Basic)。然后,我将代码更新为:

代码语言:javascript
运行
复制
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决定使用“协商”作为身份验证方法。

现在,我的问题是:如何决定应用哪种身份验证类型?某些身份验证类型是否优先于其他身份验证类型?

NetworkCredential上的文档声明:

NetworkCredential类是一个基类,它在基于密码的身份验证方案中提供凭据,例如basic、文摘、NTLM和Kerberos。

..。因此,我知道我提供的凭据可以应用于所有三种身份验证类型,但我无法弄清楚它是如何/为什么选择特定身份验证类型的。

任何对此的洞察力都是非常感谢的,谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-05-17 08:16:06

可以使用GetCredential方法,它将为您提供具有身份验证类型的凭据。有点奇怪,但很有效:

代码语言:javascript
运行
复制
var httpClientHandler = new HttpClientHandler
{
    Credentials = new NetworkCredential
    {
        UserName = "username",
        Password = "password"       
    }.GetCredential("*", 80, "Basic") // Substitute * and 80 with url and port if possible
};
var httpClient = new HttpClient(httpClientHandler);
var request = new HttpRequestMessage(HttpMethod.Get, "url");
var response = await httpClient.SendAsync(request);

评论后澄清

当您有多个身份验证类型时,客户端必须使用可用的最强方法(但有时这是不确定的)。

资料来源: HTTP Authentication - WWW-Authenticate header - multiple realms

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56182076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档