我试图通过WCF从另一台服务器上的.ASHX内部调用Sharepoint Web Service。如果我在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 - 它从哪里选择?
答案 0 :(得分:1)
根据这个:
http://support.microsoft.com/kb/207671
当IIS为HTTP请求提供服务时,IIS会执行模拟,以便适当地限制对处理请求的资源的访问。模拟的安全上下文基于为请求执行的身份验证的类型。 IIS 4.0提供的五种不同类型的身份验证是:
Authentication Type Impersonation Type
------------------------------------ ---------------------
Anonymous Access (no authentication) Network
Auto Password Synchronization is
ON (ON=default)
Anonymous Access (no authentication) IIS Clear Text
Auto Password Synchronization is OFF
Basic Authentication IIS Clear Text
NT Challenge/Response Authentication Network
Client SSL Certificate Mapping Interactive
在我的情况下,我有一个网络令牌,但
“NOT”允许网络令牌访问网络资源。 (网络令牌的命名是因为当用户通过网络进行身份验证时,传统上由服务器创建这种令牌。允许服务器使用网络令牌充当网络客户端并访问另一个服务器称为“委托”并被认为是一个可能的安全漏洞。)
KB有许多可能的方法来避免这个问题