ntlm认证失败,但Basic认证成功



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

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

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

  1. 请求没有授权头,结果是401与WWW-Authenticate NTLM+Negotiate
  2. 请求授权:协商(Base64字符串1),结果401与WWW-Authenticate:协商(Base64字符串2)
  3. 请求授权:协商(Base64字符串3),结果401与WWW-Authenticate:协商(Base64字符串4)
  4. 请求授权:协商(Base64字符串3),结果401与WWW-Authenticate NTLM+协商

显然,客户端和服务器(都运行在同一台机器上)试图握手,但最终授权失败。

奇怪的是,如果我禁用站点的Windows身份验证并启用基本身份验证并显式发送user/pwd,它都有效。如果我使用NTLM身份验证并尝试从浏览器指定我的凭据访问站点,它也可以工作。

好吧,经过几个小时的努力,我找到了问题所在。为了能够检查Fiddler中的网络流量,我定义了Fiddler规则:

if (ossession . hostnameis ("MYAPP")) {ossession。主机= "127.0.0.1";}

然后我使用"MYAPP"代替"localhost"在Web应用程序参考,Fiddler愉快地显示所有的会话信息。

但是服务器安全远没有那么高兴,所以这个别名基本上破坏了本地服务器上的挑战-响应认证。当我将别名替换为"localhost"时,一切都正常了。

最新更新