验证对WCF服务的调用

时间:2012-05-22 15:22:28

标签: wcf iis ntlm

我试图通过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 - 它从哪里选择?

1 个答案:

答案 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有许多可能的方法来避免这个问题