SSPI:用户主体名称WCF客户端

时间:2013-01-09 13:24:16

标签: wcf-client sspi

我正在尝试访问wcf客户端。我知道人们现在正在获取信息,所以我知道它有效。我的问题是我似乎无法超越它。该服务是一种相互认证的服务。我在我的本地机器上的个人商店中有相应的证书。即使这样,我也得到以下例外:

 A call to SSPI failed, see inner exception

深入搜索异常,我看到了:

Message : The target principal name is incorrect

我该如何解决这个问题?我是否需要冒充应用程序池运行的用户?我是否需要添加Identity \ ServicePrincipleName或Identity \ UserPrincipleName?有没有人遇到类似的问题?

4 个答案:

答案 0 :(得分:6)

请在此处查看我对类似问题的回答:netTCP binding Soap Security Negotiation Failed。本指南应适用于其他绑定,而不仅仅是TCP。

答案 1 :(得分:0)

我重新生成了客户端,并且output.config文件中的端点现在有<identity> <userPrincipalName value="Serviecname@companyname.com" /> </identity> 在端点标记中。所以新的端点看起来像 -

 <endpoint address="net.tcp://machinename:6001/ReferenceDataService" binding="netTcpBinding" bindingConfiguration="netTcpBindingConf" contract="IReferenceDataService" >
     <identity>
 <userPrincipalName value="Serviecname@companyname.com" />

      

这解决了我的问题

答案 2 :(得分:0)

对我来说,当我在端点中指定服务器的用户名时,它可以工作。不是客户的用户名。这是一个UPN,而不是SPN。

new EndpointAddress(
    new Uri("net.tcp://server:1234/MyWcf/svc"),
        EndpointIdentity.CreateUpnIdentity("username@domain.local"))

根据我的理解,客户端会验证它是否与预期用户交谈。

答案 3 :(得分:0)

为了以后为其他人参考,我遇到了这个问题,但是现有的答案无济于事。

我的问题是userPrincipalName被用作服务参考。

我最近重新注册了服务引用以对其进行更新,但是它已用我的电子邮件地址覆盖了日志文件中的指定userPrincipalName

<endpoint address="net.pipe://localhost/XXXX"
  binding="netNamedPipeBinding" bindingConfiguration="NetNamedPipeBinding_IXXX"
  contract="XXXServiceReference.IXXX"
  name="NetNamedPipeBinding_IXXXX">
  <identity>
    <userPrincipalName value="my@emailaddress.com" />
  </identity>
</endpoint>

要解决此问题,我只是将userPrincipalName更改为localhost,将其更改为以前的版本:

<userPrincipalName value="localhost" />