使用Windows安全性连接到WCF服务时出错

时间:2012-04-02 11:24:40

标签: c# .net wcf iis windows-authentication

我有一个客户端在两个端点上使用以下命令连接到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的标识都在同一个域中。该服务正在同一域中的服务器上运行。

1 个答案:

答案 0 :(得分:2)

如果身份验证适用于LocalSystem但不适用于域帐户,则可能是您缺少域帐户的SPN。此页面提供了有关配置服务运行身份的一些背景信息:http://msdn.microsoft.com/en-us/library/bb628618.aspx