【发布时间】:2011-01-05 00:36:29
【问题描述】:
我需要将带有当前模拟用户凭据的 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 对象?
【问题讨论】:
-
这不是双跳问题的表现吗? blogs.msdn.com/knowledgecast/archive/2007/01/31/…
-
是的,似乎与双跳问题有关,因为您在 ASP 中拥有的辅助令牌不会为您提供网络凭据。
标签: c# asp.net web-services impersonation