我们如何将WindowsIdentity转换为NetworkCredential?我正在测试WCF服务以验证匿名调用者是否被阻止。为此,我想做一些类似的事情:

myProxy.ClientCredentials.Windows.ClientCredential = foo(WindowsIdentity.GetAnonymous());

其中foo是将WindowsIdentity转换为NetworkCredential的方法

最佳答案

一般来说,foo不存在。由于NetworkCredential是WindowsIdentity的更广泛的对象。就是说,我可以在需要WindowsIdentity的地方使用NetworkCredential,而在其他情况下则不需要。

原因是由于安全性。

NetworkCredential表示允许您使用此标识并在另一台计算机上使用其关联的CREDENTIALS。

这意味着

  • 您拥有用户凭据,而不仅仅是其身份。
  • 该凭据集不仅可以用于本地访问,还可以用于模拟。

  • 我将假定凭据来自另一台计算机(由于WCF)。再次出于安全原因,在跨入此计算机时,网络凭据已转换为LocalCredential(除非我们在谈论委派而不是模拟)。客户端计算机有权在服务器计算机上和仅在服务器计算机上使用其凭据。

    如果您想取回NetworkCredential,则需要执行称为“委托(delegate)”的操作,这是因为所谓的“多跳”问题。这涉及Kerberos,这是黑社会的三头恶犬。您不想处理Kerberos。

    一般来说,默认情况下,WCF代理不随其调用一起发送凭据。您通常需要设置ClientCredentials或设置
    proxy.UseDefaultCredentials = true
    

    不提供任何一个通常意味着没有凭据,因此也就没有匿名身份验证。

    10-08 03:00