我创建了具有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/