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

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

当我在提琴手中查看请求时,它正在使用基本身份验证。我可以做些什么才能使其使用服务器所需的NTLM?



请求标头:

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标头后,会自动对NTLM执行重试,但似乎没有。但是,如果我手动重试连接,则HttpClient第二次将执行NTLM身份验证。

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

10-11 21:49