【问题标题】:Error connecting to WCF service with Windows security使用 Windows 安全性连接到 WCF 服务时出错
【发布时间】:2012-04-02 11:24:39
【问题描述】:

我有一个客户端使用以下两个端点连接到 WCF 服务:

<security mode="Message">
  <message clientCredentialType="Windows" />
</security>

这适用于我的开发环境(都在本地运行)并且协商正常。当我将它推送到测试环境时,我收到以下消息:

与目标的“http://host/service”进行 SOAP 安全协商 “http://host/service”失败。有关详细信息,请参阅内部异常。

内部异常:

System.ComponentModel.Win32Exception:安全支持提供程序 接口 (SSPI) 身份验证失败。服务器可能没有运行 在身份为“host/server-name.domain”的帐户中。如果 服务器在服务帐户中运行(例如网络服务), 将帐户的 ServicePrincipalName 指定为 服务器的端点地址。如果服务器在用户中运行 帐户,指定帐户的 UserPrincipalName 作为身份 服务器的 EndpointAddress。

在随机更改属性并且通常搞砸之后,我可以让它工作的唯一方法是更改​​服务的应用程序池以使用 LocalSystem 作为身份。这随后导致系统管理员养了小猫,这不是我可以继续做的事情。

谁能解释为什么会这样?客户端 Windows 帐户和 AppPool 的身份都在同一个域中。该服务正在同一域中的服务器上运行。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 只是想一想,如果机器是通过模板设置为虚拟机(即克隆),会是这种情况吗?
    • 我不确定被克隆(或不被克隆)的机器是否会影响这一点。 AFAIK 使用 Kerberos 服务标识需要有效的 SPN/UPN。
    猜你喜欢
    • 1970-01-01
    • 2017-07-28
    • 2013-09-25
    • 2010-12-06
    • 1970-01-01
    • 2013-12-24
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多