我正在使用 SOAP UI 向 IIS 中托管的 Web 服务发送一些 XML 请求。它已启用集成 Windows 身份验证和基本身份验证。当我同时启用集成身份验证和基本身份验证时,它有时会起作用,有时会失败并出现 401 响应代码,当它失败时我也可以看到 http 标头流量发送授权密钥。但当我仅启用基本身份验证时,它一直有效。大家有什么想法吗?
这是我的 IIS 日志在失败时的样子,它不是 401、401、200,而是 401,
401,401
2011-07-15 00:16:41 W3SVC1 POST /test/Service.asmx - 80 - 192.168.1.101 Jakarta+Commons-HttpClient/3.1 - 401 2 2148074254 0
2011-07-15 00:16:41 W3SVC1 POST /test/Service.asmx - 80 - 192.168.1.101 Jakarta+Commons-HttpClient/3.1 $Version=0; 401 1 0 0
2011-07-15 00:16:41 W3SVC1 POST /test/Service.asmx - 80 - 192.168.1.101 Jakarta+Commons-HttpClient/3.1 $Version=0; 401 1 2148074248 0
另外,我的网络服务器是网络农场的一部分。并且我的网络服务应用程序池在 network_service 下运行
答案1
当您看到 401.2、401.1(应该是 200)时,这是客户端正在与服务器进行 NTLM 交互。
如果您只看到工作客户端的 401、200,则他们正在使用 Basic 或 Kerberos。
进行集成工作的客户端之所以能够工作,可能是因为 Kerb 正在为它们工作,反之亦然,或者它们已经处于没有使用 kerberos 的多跳场景中。
有一件事我要指出,那就是在网络服务下的场中运行应用程序池将破坏 Kerb 身份验证。上面的日志模式并没有告诉我发生了什么——客户端显然在执行 NTLM 并失败了——但为了完整性我想提一下。
所以...一切又回到了:从客户端来排除故障。