模拟身份和网络凭据

9

我需要将当前模拟用户的凭据作为NetworkCredential对象传递给来自asp.net应用程序的Web服务。
我的代码如下:

WindowsIdentity windowsIdentity = HttpContext.Current.User.Identity as WindowsIdentity;
WindowsImpersonationContext context = windowsIdentity.Impersonate();
try {
    var client = GetClient();
    client.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
    Log("WindowsIdentity = {0}", windowsIdentity.Name);
    Log("DefaultNetworkCredentials = {0}", CredentialCache.DefaultNetworkCredentials.UserName);
    client.DoSomething();
} finally {
    context.Undo();
}

我曾经认为CredentialCache.DefaultNetworkCredentials应该提供当前模拟用户的凭据,但事实并非如此。
我收到的日志信息是:

WindowsIdentity = TESTDOMAIN\TESTUSER
DefaultNetworkCredentials = 

我是否做错了什么?如果是这样,如何获取当前模拟用户的NetworkCredential对象?


3
这不就是双跳问题的表现吗? - Rich
是的,这似乎与双跳问题有关,因为在 ASP 中您将拥有的辅助令牌不会提供网络凭据。 - Dirk Vollmar
2个回答

4

我有一个相关的问题,你能帮忙看一下吗:http://stackoverflow.com/questions/18842970/asp-net-imperonate-in-netframework-2-vs-netframework-4 - Saeid Alizade
第二篇文章定义了一个类,该类要求密码作为参数输入并发送。我认为模拟身份的好处在于Windows身份验证模式下能够使用Principal和Identity来访问网络资源。正如下一位发帖者所说,简单的方法无法超越本地机器(没有kerberos,这不是简单的...)。 - Thronk

1

无法使用 asp.net 模拟用户 (Current.User.Identity) 进行网络身份验证,它只能在本地工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接