我正在编写一个类来处理在 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/