【问题标题】:NTLM authentication using Windows.Web.Http.HttpClient使用 Windows.Web.Http.HttpClient 进行 NTLM 身份验证
【发布时间】:2015-12-10 11:29:55
【问题描述】:

我正在开发一个需要使用 NTLM 身份验证与 IIS 服务器通信的 Windows 10 UWP 应用。我在 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。你能发布以前的 Fiddler 请求和响应吗?
  • 注意:我正在设置密码凭据的用户名,格式为:{domain}\{username}

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多