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 [重复]