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

Authentication NTLM身份验证失败,但基本身份验证有效,authentication,httpwebrequest,ntlm,networkcredentials,Authentication,Httpwebrequest,Ntlm,Networkcredentials,下面是应用程序在本地IIS上调用HTTP请求时在本地服务器上发生的情况 request.Credentials = CredentialCache.DefaultNetworkCredentials; request.PreAuthenticate = true; request.KeepAlive = true; 当我执行请求时,我可以在Fiddler中看到以下一系列HTTP调用: 未经授权的请求标头,导致401与WWW验证NTLM+协商 带有授权的请求:协商(Bas

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

    request.Credentials = CredentialCache.DefaultNetworkCredentials;
    request.PreAuthenticate = true;
    request.KeepAlive = true;
当我执行请求时,我可以在Fiddler中看到以下一系列HTTP调用:

  • 未经授权的请求标头,导致401与WWW验证NTLM+协商
  • 带有授权的请求:协商(Base64字符串1),结果是401和WWW验证:协商(Base64字符串2)
  • 带有授权的请求:协商(Base64字符串3),结果是401和WWW验证:协商(Base64字符串4)
  • 带有授权的请求:协商(Base64字符串3),结果是401和WWW-Authenticate-NTLM+协商
  • 显然,客户端和服务器(都在同一台机器上运行)正在尝试握手,但最终授权失败


    奇怪的是,如果我禁用站点的Windows身份验证并启用基本身份验证并显式发送user/pwd,那么一切都可以正常工作。如果我使用NTLM身份验证并尝试通过指定凭据的浏览器访问站点,它也会起作用。

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

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

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


    但服务器安全性远不如此,因此此别名基本上破坏了本地服务器上的挑战-响应身份验证。一旦我用“localhost”替换了别名,一切都正常了。

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

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

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

    但服务器安全性远不如此,因此此别名基本上破坏了本地服务器上的挑战-响应身份验证。一旦我用“localhost”替换了别名,一切都正常了