wcf - WCF客户端指定的 "userPrincipalName"的作用是什么?

标签 wcf wcf-security

我创建了具有wsHttpBinding和Message安全性的WCF服务。然后,我添加了一个服务引用,该引用导致使用以下命令更新客户端的配置文件:

<client>
  <endpoint address="http://localhost:42160/Service1.svc/secure"
    binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IService1"
    contract="SecureProxy.IService1" name="WSHttpBinding_IService1">
    <identity>
        <userPrincipalName value="baria2@mydomain.com" />
    </identity>
  </endpoint>
</client>

我不明白userPrincipalName的用途。不管我将值修改为什么,客户端和服务都能成功通信。它似乎没有任何作用。

这个MSDN article试图详细解释其目的,并且以某种方式设法完全不解释。

Microsoft试图通过将其添加到WCF故事中来解决什么问题?同样,我可以将值更改为所需的任何值,并且不会影响客户端和服务。

另外,这是一个similar question

最佳答案

通常,upn可以向客户端验证服务器的身份(例如,您指示客户端信任哪个服务器,而不信任哪个服务器,例如ssl中的客户端验证主机)。

我认为,如果upn的值正确,则通信将使用kerberos;如果错误,则通信将使用ntlm(如果在某些情况下可用)。尝试禁用ntlm,然后只有正确的upn值才起作用:

<clientCredentials>
   <windows allowNtlm="false" />
</clientCredentials>

还有一种方法可以通过在服务器上放置一个断点/日志并检查ServiceSecurityContext.Current来检查是否使用了kerberos或ntlm。您应该根据upn值获得不同的值。

关于wcf - WCF客户端指定的 "userPrincipalName"的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17848013/

相关文章:

c# - 为什么我的 IAuthorizationPolicy 没有使用我的 CustomPrincipal 设置 Thread.CurrentPrincipal?

wcf - 从WCF服务生成RESTful API文档

c# - 加密 WCF 消息密码

wcf - 在 Visual Studio 中测试 WSDL

带流的 WCF block 数据

c# - WCF 托管问题

javascript - 使用 WebScriptEndpoint 使用 javascript 使用 WCF 服务

c# - 通过代理连接到 WCF 服务 (.svc)(使用用户名/密码)

c# - 启用身份验证和授权的单元测试WCF服务类

c# - 具有客户端证书和基本身份验证的 WCF 客户端