gpt4 book ai didi

wcf - 为什么 kerberos 在 WCF 中默认为 NTLM?

转载 作者:行者123 更新时间:2023-12-04 11:17:16 25 4
gpt4 key购买 nike

有一个简单的 WCF 演示应用程序,它有两个控制台项目——主机和客户端。两者都在我的机器上运行(win 7 box)。我正在使用 netTcpBinding,它使用 Windows 身份验证。

问题是身份验证正在从 kerberos 降级到 NTLM,我不知道为什么。

如果我使用

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

在客户端,一切都很酷。但是如果我把它改成 false ,我得到以下异常:

SecurityNegotiationException: The remote server did not satisfy the mutual authentication requirement.



这表明 kerberos 失败,并且由于客户端不允许 NTLM 调用导致抛出异常。

这是项目的问题,还是我的开发机器的配置导致的外部问题?

解决方案:

显然,我必须在客户端配置中指定服务器的身份。就我而言,服务器以我的身份运行,因此我修改了客户端:
<client>
<endpoint address="net.tcp://dev7.HurrDurr.com:12345/MyService"
binding="netTcpBinding"
bindingConfiguration="MyBindingConfigurationLol"
behaviorConfiguration="HurrDurrServiceEndpoint"
contract="ShaolinCore.ICommunicationService">
<!-- start changes here -->
<identity>
<userPrincipalName value="myusername@mydomain"/>
</identity>
<!-- end changes here -->
</endpoint>
</client>

我不确定为什么这可以解决问题。好的,现在在客户端,我完全信任服务器(嘿,我认识那个人!)。但是既然 NTLM 不如 kerberos 安全,为什么不反过来呢?如果我不完全信任服务器,我使用 kerberos,否则 ntlm 很好。

或者,OTOH,如果我不完全信任服务器,为什么它会工作? “SecurityException:未设置端点身份。WCF 无法信任服务器的身份,并且不会传输客户端身份。”

最佳答案

当我在 IIS4、5 和 6 开发团队工作时,我们经常遇到这种情况!要使 Curb 起作用,您需要满足以下条件:

1)双方都支持curb(今天所有支持的Windows版本都支持Curb)

2) 机器授权到 Active Directory

3) 为服务器端点注册的服务主体名称 (SPN)。在“过去的美好时光”中,您必须使用 SetSPN.exe 手动完成此操作。 SPN 只是 Curb 将连接到的端点;它需要这些数据来支持相互认证。大多数应用程序会为您调用 appprop API 来完成这项工作 (DsWriteAccountSpn)

如果上述步骤中的任何一个不正确,Windows 通常会默认为 NTLM,它只为您提供客户端身份验证。

希望有帮助!
- 迈克尔

关于wcf - 为什么 kerberos 在 WCF 中默认为 NTLM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2319001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com