【问题标题】:Authenticate a call to a WCF service验证对 WCF 服务的调用
【发布时间】:2012-05-22 15:22:27
【问题描述】:

我正在尝试通过 WCF 从不同服务器上的 .ASHX 内部调用 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 - 它是从哪里获取的?

【问题讨论】:

    标签: wcf iis ntlm


    【解决方案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
    

    就我而言,我有一个网络令牌,但是

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

    知识库有很多可能的方法来避免这个问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      • 2013-07-05
      • 2013-08-21
      • 2011-10-20
      • 1970-01-01
      • 2011-08-29
      相关资源
      最近更新 更多