【问题标题】:Getting "The Security Support Provider Interface (SSPI) negotiation failed" when using a ServiceHostFactory使用 ServiceHostFactory 时出现“安全支持提供程序接口 (SSPI) 协商失败”
【发布时间】:2011-04-06 14:48:15
【问题描述】:

我最近开始使用自定义 ServiceHostFactory,因为我想在 WCF 中使用依赖注入。我的客户端和服务都在我的本地计算机上从 VS2010 运行,并且该服务正在使用 ASP.NET 开发服务器。为什么我现在有这个问题?过去,我在 wsHttpSecurity 上取得了成功,在我的本地计算机上同时拥有客户端和服务。我真的认为这里唯一的区别是使用了 ServiceHostFactory。我试过使用 userPrincipalName 属性,但我什至不确定我应该为这个值输入什么。应该是机器名\用户名吗?这个属性会有所不同吗?如果您能提供任何帮助,我将不胜感激。

【问题讨论】:

    标签: wcf exception-handling wcf-security wshttpbinding servicehost


    【解决方案1】:

    UserNamePrincipal 描述服务凭据。如果您将 UPN 设置为某个帐户,则您声称该服务将托管在该帐户下运行的进程中。此信息在 WSDL 中传递给客户端。当客户端打开服务通道时,它首先验证服务是否在声明的帐户下运行(一些安全握手)。如果不是,则抛出异常,因为服务未经过身份验证。如果您在开发服务器上运行该服务,则必须将 UPN 设置为您当前的帐户。

    【讨论】:

    • 成功了。谢谢。 userPrincipalName 和 servicePrincipalName 有什么区别。在 Internet 上使用 WCF 时,人们通常需要设置 servicePrincipalName 吗?
    • 它们都不用于通过 Internet 进行通信。它仅适用于相同的 Windows 域(或受信任的域)。用户主体只是用户名。有关服务主体检查的说明:technet.microsoft.com/en-us/library/cc961723.aspx Kerberos 身份验证需要服务主体。
    • 尽管上述解决方案有效,但仅在我连接到公司网络时才有效。当我“离线”时,我会遇到同样的安全异常。
    • 是的,如果您使用域名作为用户主体并且您未连接到域,则会发生这种情况。
    猜你喜欢
    • 2014-05-31
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多