1

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

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

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

  1. 没有授权标头的请求,使用 WWW-Authenticate NTLM+Negotiate 导致 401
  2. 授权请求:协商(Base64 字符串 1),使用 WWW-Authenticate:协商(Base64 字符串 2)导致 401
  3. 授权请求:协商(Base64 字符串 3),使用 WWW-Authenticate:协商(Base64 字符串 4)导致 401
  4. 授权请求:协商(Base64 字符串 3),使用 WWW-Authenticate NTLM+协商导致 401

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

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

4

1 回答 1

1

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

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

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

但是服务器安全性远没有那么令人满意,所以这个别名基本上破坏了本地服务器上的质询-响应身份验证。将别名替换为“localhost”后,一切正常。

于 2013-01-18T23:43:15.483 回答