WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity;如何使这个演员工作;目前它失败了

Posted

技术标签:

【中文标题】WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity;如何使这个演员工作;目前它失败了【英文标题】:WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity; How to make this cast work; currently it is failing 【发布时间】:2009-06-11 20:24:16 【问题描述】:

我基本上是在尝试通过模拟登录用户从我的 Web 应用程序访问网络共享资源。我遵循了这个例子 [http://msdn.microsoft.com/en-us/library/ms998351.aspx#paght000023_impersonatingbyusingwindowsidentity],这里作者没有提到演员阵容失败。当我进行该演员表时,我得到了无法进行演员表的运行时异常。以前有人遇到过这种问题吗?

非常感谢您的指导或建议!

谢谢

  WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity;
WindowsImpersonationContext ctx = null;
try

  // Start impersonating
  ctx = winId.Impersonate();
  // Now impersonating
  // Access resources using the identity of the authenticated user

// Prevent exceptions from propagating
catch


finally

  // Revert impersonation
  if (ctx != null)
  ctx.Undo();

// Back to running under the default ASP.NET process identity

【问题讨论】:

【参考方案1】:

您的Identity 中到底是什么?也许它是通用身份或其他身份 - 而不是您认为的 Windows 身份:

string typeOfIdentity = HttpContext.Current.User.Identity.GetType().FullName;

这里的结果是什么?这可能会为您提供更多关于您在这里真正处理的信息。

马克

【讨论】:

这很明显;那就是 FormsIdentity ,你可以从 HttpContext 推断出来。【参考方案2】:

我不确定你想用模拟做什么,所以很难 告诉您确切的操作方法,但您的 Web 应用程序中的 User 对象是 等效于 System.Security.Principal.IPrincipal 对象,而不是 WindowsPrincipal 对象。

同样,User.Identity 是 IIdentity 而不是 WindowsIdenity 对象。

你能发布更多关于你想要做什么的信息吗?

【讨论】:

请阅读参考这篇:[msdn.microsoft.com/en-us/library/…, 演员总是会因为我提到的原因而失败。

以上是关于WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity;如何使这个演员工作;目前它失败了的主要内容,如果未能解决你的问题,请参考以下文章

Qt winId() 强制 32 位值

WindowsIdentity.Impersonate 和 PostBack 问题

如何将 WindowsIdentity 转换为 NetworkCredential?

从 WindowsIdentity 和 Thread.CurrentPrincipal 检索 WindowsPrincipal 有啥区别?

WindowsIdentity.GetCurrent().Impersonate() 做啥

在 aspnet 应用程序中通过模拟获取 WindowsIdentity 的不同方法