验证对WCF服务的调用

验证对WCF服务的调用,wcf,iis,ntlm,Wcf,Iis,Ntlm,我试图通过WCF从不同服务器上的.ASHX内部调用Sharepoint Web服务。如果我在VisualStudio的调试web服务器内部运行,而不是从IIS运行,则我的代码可以工作。工作服务器在各种身份验证模式(Kerberos、NTLM)下工作,而非工作服务器在任何情况下都不工作。在这两种情况下,我都模拟同一个用户 使用NTLM,我在Wireshark中录制了工作会话和非工作会话。在工作模式中,Wireshark解析NTLM数据并报告我期望的域名和用户名。在非工作状态下,它显示 DOMA

我试图通过WCF从不同服务器上的.ASHX内部调用Sharepoint Web服务。如果我在VisualStudio的调试web服务器内部运行,而不是从IIS运行,则我的代码可以工作。工作服务器在各种身份验证模式(Kerberos、NTLM)下工作,而非工作服务器在任何情况下都不工作。在这两种情况下,我都模拟同一个用户

使用NTLM,我在Wireshark中录制了工作会话和非工作会话。在工作模式中,Wireshark解析NTLM数据并报告我期望的域名和用户名。在非工作状态下,它显示

  DOMAIN: NULL
  USER NAME: NULL
我已经在IIS中进行了调试,并且在服务调用时模拟确实可以工作。如果我选中
WindowsIdentity.GetCurrent()
,它就是我期望的用户

如果我检查工作服务器和非工作服务器上的WCF服务代理,它们看起来是一样的——处理ClientCredentials的部分对于两个版本的用户名和密码都设置为
“”

还有什么好查的吗?为什么NTLM数据会将域名和用户名设置为NULL?它从何处获取它?

根据以下内容:

当IIS为HTTP请求提供服务时,IIS会执行模拟,以便适当限制处理请求的资源访问。模拟的安全上下文基于为请求执行的身份验证类型。IIS 4.0提供的五种不同类型的身份验证是:

在我的例子中,我有一个网络令牌,但是

不允许网络令牌访问网络资源。(之所以这样命名网络令牌,是因为这种令牌传统上是在用户通过网络进行身份验证时由服务器创建的。允许服务器使用网络令牌充当网络客户端并访问另一台服务器称为“委派”,这被认为是一个可能的安全漏洞。)

知识库有许多可能的方法来避免此问题,如下所示:

当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