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;如何使这个演员工作;目前它失败了的主要内容,如果未能解决你的问题,请参考以下文章
WindowsIdentity.Impersonate 和 PostBack 问题
如何将 WindowsIdentity 转换为 NetworkCredential?
从 WindowsIdentity 和 Thread.CurrentPrincipal 检索 WindowsPrincipal 有啥区别?