6

我知道如何为 NTLM 身份验证配置 basicHttpBinding,但不知道如何为 netTcpBinding 做同样的事情。

netTcpBinding 是否支持 NTLM?如果是这样,如何强制 WCF 服务使用 NTLM?

顺便说一句,由于某种原因使用身份元素的众所周知的方法根本不起作用。我正在寻找这样的东西 - clientCredentialType ="Ntlm" 但对于 tcp。这是基本的Http设置:

<basicHttpBinding>
  <binding name="BasicHttpBinding">
  <security mode ="TransportCredentialOnly">
  <transport clientCredentialType ="Ntlm"/>
  </security>
  </binding>
</basicHttpBinding>
4

2 回答 2

5

这是我最终找到、测试和确认的综合答案。

A. 我的 WCF 客户端用于动态构建 EndPoint.Address,如下所示

EndPointAddress  myEdpintAddress = new EndPointAddress(stringURL);

但在安全传输(net.tcp)的情况下,它必须初始化如下 EndPointAddress myEdpintAddress = new EndPointAddress(new UrRL(string), myEndPointIdentity

如果没有 EndPointIdentity 参数,EndPointAddress 对象中的 Identity 属性为 null,并在服务器端生成“...目标主体名称不正确...”错误。

B. 我们的域控制器支持 Kerberos 和 Ntlm 身份验证。完成上述操作后,如果安全性不是“None”,并且WCF服务以域帐户运行,则客户端一般有四种配置net.tcp绑定的场景:

  1. <identity>指定客户端端点中的元素 - WCF 调用失败

  2. <identity>提供的元素,但 dns、userPrioncipalName 或 servicePrincipalName 元素的值为空 - WCF 调用成功,但使用 Ntlm 身份验证

  3. <identity>为 dsn 或 SPN 提供值的元素 - WCF 调用成功;服务使用 Ntlm 进行身份验证。

  4. <identity>为 upn 提供了正确值的元素 – WCF 调用成功;服务使用 Kerberos 进行身份验证。upn 触发器 Ntlm 身份验证的值不正确或缺失

谢谢。

于 2010-02-14T15:45:02.280 回答
0

网络 TCP 绑定不支持将“NTLM”作为客户端凭据类型 - 您可以选择或None仅(请参阅TcpClientCredentialType 上的 MSDN 文档)。WindowsCertificate

所以在你的情况下,试试这个:

<netTcpBinding>
  <binding name="tcpWindows">
    <security mode ="TransportCredentialOnly">
      <transport clientCredentialType ="Windows"/>
    </security>
  </binding>
</netTcpBinding>

为什么这不起作用的任何原因?

于 2010-02-05T06:15:58.313 回答