【问题标题】:Impersonation and NetworkCredential模拟和网络凭据
【发布时间】: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 对象?

【问题讨论】:

标签: c# asp.net web-services impersonation


【解决方案1】:

MSDN 中一篇较长的文章解释了在 ASP 中获取网络凭据的选项:

How To: Use Impersonation and Delegation in ASP.NET 2.0

关于该主题的另一篇博客文章(虽然我没有检查该解决方案是否真的有效:

.NET (C#) Impersonation with Network Credentials

【讨论】:

  • 我问一个相关的问题,请您检查一下:stackoverflow.com/questions/18842970/…
  • 第二篇文章定义了一个类,需要输入密码并作为参数发送。我认为模拟的好处是在 Windows 身份验证模式下能够使用主体和身份来访问网络资源。正如下一张海报所说,简单的方法在本地机器之外是不可能的(没有kerberos,这并不简单......)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2020-05-26
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多