NTLM身份验证失败但基本身份验证有效

时间:2013-01-18 17:53:02

标签: authentication httpwebrequest ntlm networkcredentials

以下是应用程序在本地IIS上调用HTTP请求时本地服务器上发生的情况。

    request.Credentials = CredentialCache.DefaultNetworkCredentials;
    request.PreAuthenticate = true;
    request.KeepAlive = true;

当我执行请求时,我可以在Fiddler中看到以下一系列HTTP调用:

  1. 没有授权标头的请求,使用WWW-Authenticate NTLM + Negotiate
  2. 生成401
  3. 请求授权:协商(Base64字符串1),结果401与WWW-Authenticate:Negotiate(Base64 string 2)
  4. 请求授权:协商(Base64字符串3),结果401与WWW-Authenticate:Negotiate(Base64 string 4)
  5. 请求授权:协商(Base64字符串3),结果401与WWW-Authenticate NTLM + Negotiate
  6. 显然客户端和服务器(都在同一台机器上运行)正在尝试握手,但最终授权失败。

    奇怪的是,如果我禁用网站的Windows身份验证并启用基本身份验证并明确发送用户/密码,那么一切正常。如果我使用NTLM身份验证并尝试从浏览器访问指定我的凭据的网站,它也可以。

1 个答案:

答案 0 :(得分:1)

好吧,经过几个小时的挣扎,我发现了问题所在。为了能够检查Fiddler中的网络流量,我定义了一个Fiddler规则:

if(oSession.HostnameIs(“MYAPP”)){oSession.host =“127.0.0.1”; }

然后我在Web应用程序参考中使用了“MYAPP”而不是“localhost”,Fiddler愉快地显示了所有会话信息。

但服务器安全性远没那么高兴,因此这个别名基本上打破了本地服务器上的质询 - 响应身份验证。一旦我用“localhost”替换了别名,这一切都有效。