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

时间:2015-12-03 16:17:10

标签: c# authentication uwp windows-10-universal

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

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

当我在fiddler中查看请求时,它正在使用Basic Auth。有什么办法可以让它使用服务器需要的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

1 个答案:

答案 0 :(得分:1)

简短回答:NTLM auth可以使用用户名/密码。需要第二次重试连接,因为HttpClient在服务器需要NTLM时预先发送BASIC auth

答案很长:我的应用程序联系了同一服务器上托管的两个服务。第一个允许Basic auth,但第二个只允许NTLM。首先,我连接到Basic auth服务,然后连接到NTLM服务。我假设HttpClient在获得WWW-Authenticate: NTLM标题时会自动使用NTLM重试,但看起来它没有。但是,如果我手动重试连接,那么第二次HttpClient将执行NTLM身份验证。