c# - 使用 Windows.Web.Http.HttpClient 的 NTLM 身份验证

标签 c# authentication uwp windows-10-universal

我正在开发需要使用 NTLM 身份验证与 IIS 服务器通信的 Windows 10 UWP 应用程序。我在 HttpBaseProtocolFilter 中设置用户名和密码:

filter.ServerCredential = new PasswordCredential(uri, UserName, Password);

当我在 fiddler 中查看请求时,它正在使用 Basic Auth。我能做些什么来让它使用服务器需要的 NTLM 吗?


请求 header :

Content-Length: 1459
Content-Type: text/xml; charset=utf-8
Host: server
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ClientId=XXXXXXXXX
Authorization: Basic XXXXXXXXX

响应头:

HTTP/1.1 401 Anonymous Request Disallowed
Server: Microsoft-IIS/8.5
request-id: xxxxx
WWW-Authenticate: NTLM
WWW-Authenticate: Negotiate
X-Powered-By: ASP.NET
X-FEServer: XXXXXXX
Date: Thu, 03 Dec 2015 16:12:58 GMT
Content-Length: 0
Proxy-Support: Session-Based-Authentication

最佳答案

简短回答:NTLM 身份验证确实可以使用用户名/密码。需要再次重试连接,因为当服务器需要 NTLM 时,HttpClient 会预先发送 BASIC 身份验证

长答案:我的应用程序联系托管在同一服务器上的两项服务。第一个允许基本身份验证,但第二个只允许 NTLM。首先,我连接到基本身份验证服务,然后连接到 NTLM 服务。我假设 HttpClient 在获得 WWW-Authenticate: NTLM header 时会自动使用 NTLM 执行重试,但它似乎没有。但是,如果我手动重试连接,则 HttpClient 第二次将执行 NTLM 身份验证。

关于c# - 使用 Windows.Web.Http.HttpClient 的 NTLM 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34070957/

相关文章:

c# - 在 asp.net 网页上显示随机报价

c# - 我可以使用 RabbitMQ 将大文件分发到多台机器吗?

c# - 如何正确设置 ASP.NET 开发服务器?

c# - 结构数组,多线程,我可以同时写到不同的索引吗?

symfony - 使用 FOSUserBundle 自动登录 Symfony2

javascript - 多次调用 google 表格时,API 身份验证不适用于第二次调用 : Request had insufficient authentication scopes

encryption - Ajax登录: Password Encryption

c# - UWP - 在不更改最小化/关闭按钮颜色的情况下更改后退按钮颜色

sqlite - 当为UWP使用Scaffold-DbContext时,出现“无法加载DLL'sqlite3'”

c# - 后台任务中的异步调用不起作用