使用Windows.Web.Http.HttpClient进行NTLM身份验证

3
我正在开发一款Windows 10 UWP应用,需要使用NTLM身份验证与IIS服务器通信。我在HttpBaseProtocolFilter中设置了用户名和密码: filter.ServerCredential = new PasswordCredential(uri, UserName, Password); 但是,当我在Fiddler中查看请求时,它使用的是基本身份验证。有什么办法可以让它使用服务器要求的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 上运行正常。你能发布之前的 Fiddler 请求和响应吗? - kiewic
一个注意事项:我正在以{domain}\{username}的形式设置密码凭据的用户名。 - Michael Sabin
1个回答

1
简短回答:NTLM认证可以使用用户名/密码。需要重新尝试连接第二次,因为当服务器想要NTLM时,HttpClient会预先发送基本认证。
长回答:我的应用程序联系同一台服务器上托管的两个服务。第一个允许基本认证,但第二个只允许NTLM。首先我连接到基本认证服务,然后连接到NTLM服务。 我会假设当它收到WWW-Authenticate: NTLM头时,HttpClient会自动执行带有NTLM的重试,但似乎它并没有。 但是,如果我手动重试连接,则第二次HttpClient将执行NTLM认证。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接