在允许的进程之间传递Windows安全令牌

时间:2010-02-25 03:12:40

标签: windows security impersonation

想象一下,我作为特定用户在Windows下运行现有进程。是否允许该进程获取其当前令牌(使用类似OpenThreadToken和DuplicateTokenEx的东西),将其传递到同一台机器上的另一个进程(可能通过网络套接字或其他一些IPC),然后期望该进程能够用它来调用CreateProcessAsUser?

从我阅读的文档(http://msdn.microsoft.com/en-us/library/ms682429%28VS.85%29.aspx)中,我没有看到任何禁止这一点的内容,但是令牌只能由创建它的线程或进程使用。

(为什么?我希望有一个Web请求进入IIS,进行身份验证,让IIS安排模拟远程用户,然后将模拟令牌传递给另一个服务器进程(在同一台机器上),以便服务器进程可以在远程用户的上下文中执行一些安全检查)

3 个答案:

答案 0 :(得分:8)

是的,这是可能的。您可以使用DuplicateHandle获取对目标进程有效的句柄(将新句柄值发送到目标进程,因此它知道它。)。 但是,目标进程仍必须具有相应使用令牌的权限。例如。 SE_IMPERSONATE模仿用户和CPAU使用的SE_ASSIGN_PRIMARY。当然,您可以在MSDN中为ImpersonateLoggedOnUser和CPAU读取一些例外。

答案 1 :(得分:5)

我没有尝试过,但似乎这是同一个问题asked here。描述似乎有意义。通过您选择的任何机制(例如IPC)传递进程ID,然后调用OpenProcessOpenProcessToken,最后调用ImpersonateLoggedOnUser。生成的句柄可以传递给CreateProcessAsUser。嗯...我知道它可以传递给那个函数但是它是否会有我想知道的结果。但有趣的问题是。

答案 2 :(得分:4)

为什么不使用命名管道,然后调用ImpersonateNamedPipeUser() - 它安全可靠!请注意,执行模拟的过程必须具有模拟权限。