我正在编写一个类来处理在 asp.net、WCF 服务和 WinForms 应用程序中使用的模拟和委托(delegate)。

根据 MSDN ,WindowsIdentity.GetCurrent() 返回一个代表当前 Windows 用户的 WindowsIdentity 对象。



根据 MSDN ,WindowsIdentity.Impersonate 允许代码模拟不同的 Windows 用户。

那么,模拟当前用户有什么影响,更重要的是,在 Web 应用程序中,WindowsIdentity.GetCurrent() 如何返回进程启动者身份或已经模拟的最终用户以外的内容?

最佳答案

如果发生 Win32 错误,Impersonate() 将抛出 SecurityException。因此,它很可能是通过 Win32 函数实现的,很可能是 ImpersonateLoggedOnUser()

它的文档说(强调我的):



因此,我非常倾向于认为 WindowsIdentity.GetCurrent().Impersonate() 会成功地为同一用户建立一个新的模拟层。

关于您问题的第二部分,您似乎将 WindowsIdentity.GetCurrent()HttpContext.User 混淆了。在 Web 应用程序中, WindowsIdentity.GetCurrent() 始终返回线程所有者(通常是 Network Service ),而 HttpContext.User 返回当前已验证的用户(如果有)。

关于c# - WindowsIdentity.GetCurrent().Impersonate() 做什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8072624/

10-14 22:28