Ntlm和NTLM之间的WCF有什么区别,我该如何解决?

时间:2011-12-23 16:45:31

标签: vb.net wcf authentication ntlm

我有一个在IIS 6上运行的WCF服务,使用NTLM进行集成身份验证和模拟。

Web.Config

的相关部分
  <system.web>
    <identity impersonate="true"/>
    <customErrors mode="Off"></customErrors>
  </system.web>
    <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    ...
  </system.web>
  ...
  <wsHttpBinding>
    <binding name="wsHttpEndpointBinding">
      <security mode="Transport">
        <transport clientCredentialType="Ntlm" />
      </security>
    </binding>
   </wsHttpBinding>

我刚刚添加了aspNetCompatibility,因为我想知道用户是谁登录的(至少就IIS而言)。从我做过的几次搜索中,你就得到了用户。

好吧,在添加该行并发布我的服务器后,我得到的可能是我见过的最愚蠢的错误:

  

HTTP请求未经授权使用客户端身份验证方案'Ntlm'。从服务器收到的身份验证标头是“NTLM”。

我想,“很明显,他们正在做一个非常区分大小写的比较。”所以我搜索了我的整个客户端解决方案的Ntlm并用NTLM替换了所有非变量的出现。没有运气。

我的主要目标当然是通过IIS + NTLM获取任何用户身份验证。如果我采用错误的方式,我会很高兴知道一种更简单/更好的方式。否则,我如何告诉我的客户端(或我的服务器)可以继续进行身份验证?

2 个答案:

答案 0 :(得分:2)

如果您遇到此错误,另一种可能性是您遇到使用NTLM进行环回检查的问题。我有一个服务,它在非域(工作组)服务器上运行自包含。使用带有传输安全模式和Ntlm客户端凭据的BasicHttpBinding配置WCF。尝试使用https://servername访问服务时效果很好。如果我尝试使用FQDN(https://servername.domain.com)访问它,它将失败并出现相同的错误:

The HTTP request is unauthorized with client authentication scheme 'Ntlm'. The authentication header received from the server was 'NTLM'.

如果您查看Windows安全日志,您将看到事件ID为4625的审核失败。在此您将看到以下失败信息:

Failure Information:
Failure Reason: An Error occured during Logon.
Status:         0xc000006d
Sub Status:     0x0

要解决此问题,您需要add the back connect host names (preferred) or disable the loopback check。这是为Windows Server 2003 SP1中的NTLM添加的安全增强功能,后来为该协议关闭了攻击向量。然而,修复程序会导致许多不明确的错误消息,例如来自WCF的错误消息,并且直到今天仍然以许多模糊的方式困扰着我。

答案 1 :(得分:-1)

开始Here。这应该可以解决您的问题