我有一个客户端在两个端点上使用以下命令连接到WCF服务:
<security mode="Message">
<message clientCredentialType="Windows" />
</security>
这适用于我的开发环境(都在本地运行),并且协商正常。当我将它推送到测试环境时,我收到以下消息:
与目标的“ http:// host / service ”进行SOAP安全协商 ' http:// host / service '失败。有关详细信息,请参阅内部异常。
内部异常:
System.ComponentModel.Win32Exception:安全支持提供程序 接口(SSPI)身份验证失败。服务器可能没有运行 在具有“ host / server-name.domain ”标识的帐户中。如果 服务器正在服务帐户中运行(例如网络服务), 将帐户的ServicePrincipalName指定为中的标识 服务器的EndpointAddress。如果服务器在用户中运行 帐户,将帐户的UserPrincipalName指定为身份 服务器的EndpointAddress。
在随机更改属性并且通常搞乱之后,我能够使其工作的唯一方法是更改服务的应用程序池以使用LocalSystem作为标识。这随后导致系统管理员有小猫,而不是我可以继续做的事情。
任何人都可以解释为什么会这样吗?客户端Windows帐户和AppPool的标识都在同一个域中。该服务正在同一域中的服务器上运行。
答案 0 :(得分:2)
如果身份验证适用于LocalSystem但不适用于域帐户,则可能是您缺少域帐户的SPN。此页面提供了有关配置服务运行身份的一些背景信息:http://msdn.microsoft.com/en-us/library/bb628618.aspx