【发布时间】:2014-10-21 20:03:52
【问题描述】:
在同一个仅限 Intranet 的机器上,我有一个 IIS 8 托管网站,它调用第二个 IIS 托管 WCF 服务。
- 为这两个应用程序启用了 Windows 身份验证(所有其他应用程序都已禁用)
- 网站托管在域服务帐户下。
- 在 IIS AppPool 用户下托管的 WCF 服务站点。
绑定如下所示:
<binding name="BasicHttpBinding_ServiceName" sendTimeout="00:05:00">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
当网站使用 netbios 或 IP 地址访问服务时,一切正常。但是,我现在想在生产环境中使用 FQDN(http://services.company.local 和 http://web.company.local)。一旦我尝试通过 FQDN 调用 WCF 服务,我就会收到 401 uauthorized 并带有以下异常消息:
MessageSecurityException:HTTP 请求未经客户端授权 身份验证方案“协商”。收到的认证头 来自服务器的是“协商,NTLM”。
我尝试将 clientCredentialType 更改为 NTLM 并从 IIS 身份验证中删除协商提供程序(如另一个 SO 问题中所建议)但没有成功(相同的错误消息,只是从服务器收到的标头是“NTLM”而不是“协商,NTLM”。从其他研究看来,与为该站点创建的两个子域相关联的 SPN 可能存在问题,但我不确定 1. 如何检查这些域的 SPN,2. 什么SPN 应该是,并且 3. 如果考虑到我正在使用内核模式身份验证,这仍然相关。
【问题讨论】:
标签: wcf-security