我正在尝试从不同服务器上的 .ASHX 内部通过 WCF 调用 Sharepoint Web 服务。如果我在 Visual Studio 的调试 Web 服务器内部运行,但不能从 IIS 运行,我的代码就可以工作。工作服务器在各种身份验证模式(Kerberos、NTLM)下工作,而非工作服务器在任何身份验证模式下都不工作。在这两种情况下,我都在冒充同一个用户。
使用 NTLM,我在 Wireshark 中记录了工作会话和非工作会话。在工作中,Wireshark 解析 NTLM 数据并报告我期望的 DOMAIN 和 USER NAME。在非工作中,它显示
DOMAIN: NULL
USER NAME: NULL
我已经在 IIS 中进行了调试,并且模拟肯定在服务调用时起作用。如果我检查WindowsIdentity.GetCurrent()
,它就是我期望的用户。
如果我检查工作服务器和非工作服务器上的 WCF 服务代理,它们看起来是相同的——处理 ClientCredentials 的部分设置""
为两个版本的用户名和密码。
关于还有什么要检查的任何想法?为什么 NTLM 数据会将 DOMAIN 和 USER NAME 设置为 NULL - 它从哪里获取?