我知道如何为NTLM身份验证配置basicHttpBinding,但无法找到为netTcpBinding执行相同操作的方法。
netTcpBinding是否支持NTLM?如果是这样,如何强制WCF服务使用NTLM?
BTW由于某种原因使用身份元素的一个众所周知的方法根本不起作用。我正在寻找类似的东西 - clientCredentialType =“Ntlm”但是对于tcp。 这是basicHttp设置:<basicHttpBinding>
<binding name="BasicHttpBinding">
<security mode ="TransportCredentialOnly">
<transport clientCredentialType ="Ntlm"/>
</security>
</binding>
</basicHttpBinding>
答案 0 :(得分:5)
以下是我最终找到,测试和确认的综合答案。
一个。我的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”,则客户端通常有四种配置方案用于net.tcp绑定,WCF服务作为域帐户运行:
指定的客户端端点中没有<identity>
个元素 - WCF调用失败
<identity>
元素,但dns,userPrioncipalName或servicePrincipalName元素的值为空--WCF调用成功,但使用Ntlm身份验证
<identity>
元素提供了dsn或SPN的值 - WCF调用成功;服务使用Ntlm进行身份验证。
<identity>
元素提供了正确的upn值 - WCF调用成功;服务使用Kerberos进行身份验证。 upn触发器Ntlm身份验证的值不正确或缺失
感谢。
答案 1 :(得分:0)
Net TCP Binding不支持“NTLM”作为客户端凭据类型 - 您可以选择None
,Windows
或Certificate
(请参阅MSDN docs on TcpClientCredentialType )。
所以在你的情况下,试试这个:
<netTcpBinding>
<binding name="tcpWindows">
<security mode ="TransportCredentialOnly">
<transport clientCredentialType ="Windows"/>
</security>
</binding>
</netTcpBinding>
为什么这不起作用?