我们如何转换一个WindowsIdentity
to a NetworkCredential
?我正在测试我的 WCF 服务以验证匿名调用者是否被阻止。为此,我想做类似的事情:
myProxy.ClientCredentials.Windows.ClientCredential = foo(WindowsIdentity.GetAnonymous());
where foo
是一种转换方法WindowsIdentity
to a NetworkCredential
一般来说 foo 不存在。由于 NetworkCredential 是比 WindowsIdentity 更广泛的对象。也就是说,我可以在需要 WindowsIdentity 的地方使用 NetworkCredential,但反之则不然。
原因是出于安全考虑。
NetworkCredential 意味着您可以获取此身份并在另一台计算机上使用其关联的凭据。
这意味着
- 您拥有用户凭证而不仅仅是其身份。
- 该组凭据适用于模拟,而不仅仅是本地访问。
我假设凭据来自另一台计算机(由于 WCF)。同样出于安全原因,该网络凭据在跨入该计算机时已转换为本地凭据(除非我们谈论的是委派而不是模拟)。客户端计算机授予在服务器计算机上且仅在服务器计算机上使用其凭据的权利。
如果您想取回 NetworkCredential,则需要执行称为“委托”的操作,因为存在所谓的“多跳”问题。这涉及到Kerberos,一只来自地狱的三头恶狗。您不想与 Kerberos 打交道。
一般来说,默认情况下,WCF 代理不会在调用时发送凭据。您通常需要设置 ClientCredentials 或设置
proxy.UseDefaultCredentials = true
不提供任何一个通常意味着没有凭据,因此是匿名身份验证。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)