Windows 身份验证不适用于 HttpClient [重复]

Posted

技术标签:

【中文标题】Windows 身份验证不适用于 HttpClient [重复]【英文标题】:Windows authentication not working with HttpClient [duplicate] 【发布时间】:2014-10-25 17:05:16 【问题描述】:

我正在尝试使用 HttpClient 访问网站中的文件,但收到 401 Unauthorized。

网站配置了

<authentication mode="Windows" /> 
...
<authorization>
  <allow users="*" />
</authorization>

并且 IIS 被配置为仅用于 Windows 身份验证。

通过在 URL 中指定地址,我可以使用 Internet Explorer 访问该文件,并且不会提示我输入用户名/密码。

当尝试使用 HttpClient 执行“相同”操作时,我得到 401 Unauthorized。

var httpClientHandler = new HttpClientHandler  UseDefaultCredentials = true ;

using (var httpClient = new HttpClient(httpClientHandler))

    var response = httpClient.GetAsync("http://example.com/welcome.png");
    // The response is 401 Unauthorized.

我做错了什么?

更新:

它在使用基本身份验证并指定 httpClientHandler.Credentials = new NetworkCredential("DOMAIN\my.name", "mypassword") 时有效,但不用说这不是一个选项。需要 Windows 身份验证且不必指定用户名/密码。

【问题讨论】:

【参考方案1】:

您可以在 IE 中查看文件,因为您已经登录到计算机,并且 IE 负责将令牌/票证(成功登录后生成)传递给服务器以通过 Windows 身份验证。

您可以参考 MSDN 并了解如何使用 HTTPClient 通过 Windows 身份验证 http://social.msdn.microsoft.com/Forums/windowsapps/en-US/78c981f4-9dc6-4785-a8ff-f8e90d7c93b7/is-there-a-way-to-get-windows-authentication-with-httpclient

【讨论】:

是的,我提到 IE 是为了证明 IIS 设置工作正常。我发现它在指定 httpClientHandler.Credentials = new NetworkCredential("DOMAIN\\my.name", "mypassword") 时适用于基本身份验证,但我需要它无需“手动”指定凭据和 WinAuth 即可工作。我读了你链接到的文章,但我没有看到你认为我错过了什么?我指定了 UseDefaultCredentials = true。 defaultWindowsCredentials 和 privateNetworkClientServer 似乎与 Windows Phone 相关,我正在开发 WPF 应用程序。 好吧,我对 WPF API 了解不多。我认为您可以使用此处 cmets 部分中提到的 WebRequestHandler -- asp.net/web-api/overview/security/… -------------------------------- -------------------- WebRequestHandler handler = new WebRequestHandler() AllowAutoRedirect = false, UseProxy = false, Credentials = System.Net.CredentialCache.DefaultNetworkCredentials ; HttpClient 客户端 = 新的 HttpClient(handler)--------------

以上是关于Windows 身份验证不适用于 HttpClient [重复]的主要内容,如果未能解决你的问题,请参考以下文章

System.Net.WebClient 不适用于 Windows 身份验证

Windows 身份验证不适用于 HttpClient [重复]

Windows 身份验证不适用于 SQL Server

通过 Angular 调用时,Windows 身份验证不适用于 WebAPI

webDAV IIS6 身份验证不适用于匿名禁用

基于身份的身份验证不适用于 Azure 存储文件共享