【问题标题】:What purpose does the WCF client-specified "userPrincipalName" serve?WCF 客户端指定的“userPrincipalName”有什么用途?
【发布时间】:2013-07-25 02:28:33
【问题描述】:

我创建了一个具有 wsHttpBinding 和消息安全性的 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

【问题讨论】:

  • 我很好奇当你完全删除它时它是否有效?

标签: wcf wcf-security


【解决方案1】:

一般来说,upn 用于向客户端验证服务器(例如,您指示客户端哪个服务器受信任,哪个不受信任,例如客户端在 ssl 中验证主机)。

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

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

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

【讨论】:

    【解决方案2】:

    默认情况下,当服务配置为使用 Windows 凭据时,会生成 &lt;identity&gt;&lt;userPrincipalName&gt; 元素。

    【讨论】:

    • 是的,但这样做的目的是什么?它解决了什么问题?为什么 userPrincipalName 的值可以更改为任意值而没有效果?
    【解决方案3】:

    默认情况下,当服务配置为使用 Windows 凭据时,会在由服务模型元数据实用工具 (Svcutil.exe) 生成的 WSDL 文档中生成一个 and 元素。如果服务在 LocalSystem 下运行。 LocalService 或 NetworkService 帐户,服务主体名称 (SPN) 将以 host/ 的形式生成,因为这些帐户可以访问计算机的 SPN 数据。如果服务在不同的帐户下运行,WCF 会生成 @ 形式的主体名称 (UPN)。这是因为 Kerberos 身份验证需要向客户端提供 UPN 或 SPN 以对服务进行身份验证。

    如果您在代码或配置中设置服务端点的标识,则不会发生此行为。您还可以使用 SetSpn.exe (http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/setspn-o.asp) 工具在域中使用服务帐户注册其他 SPN。然后可以将 SPN 用作服务的标识。

    这里提到:https://social.msdn.microsoft.com/Forums/vstudio/en-US/78638457-ca7a-4f88-b8a9-9bc32d4b5c7d/userprincipalname-element-generated-in-client-config?forum=wcf

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-09
      • 2012-08-22
      • 1970-01-01
      • 2021-04-11
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多