我有一个在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获取任何用户身份验证。如果我采用错误的方式,我会很高兴知道一种更简单/更好的方式。否则,我如何告诉我的客户端(或我的服务器)可以继续进行身份验证?
答案 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。这应该可以解决您的问题