是否允许在进程之间传递windows安全令牌

是否允许在进程之间传递windows安全令牌,windows,security,impersonation,Windows,Security,Impersonation,假设我有一个作为特定用户在windows下运行的现有进程。是否允许该进程获取其当前令牌(使用类似OpenThreadToken和DuplicateTokenEx的东西),将其传递给同一台机器上的另一个进程(可能通过网络套接字或其他IPC),然后期望该进程能够使用它调用CreateProcessAsUser 从我读过的文档()中,我没有看到任何禁止使用该标记的内容,但可能该标记只能由创建它的线程或进程使用 (为什么?我想让web请求到达IIS,进行身份验证,让IIS安排远程用户的模拟,然后将模拟令

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

从我读过的文档()中,我没有看到任何禁止使用该标记的内容,但可能该标记只能由创建它的线程或进程使用


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

我没有尝试过,但这似乎是同一个问题。这个描述似乎有道理。通过您选择的任何机制(例如IPC)传递进程ID,然后调用,最后。生成的句柄可以传递给CreateProcessAsUser。好。。。我知道它可以被传递给那个函数,但我不知道它是否会得到期望的结果。不过,这是一个有趣的问题。

为什么不直接使用命名管道,然后调用ImpersonateNamedPipeUser()-这样既安全又简单!请注意,执行模拟的进程必须具有模拟权限。

是的,这是可能的。您可以使用DuplicateHandle获取对目标进程有效的句柄(将新句柄值发送给目标进程,以便它知道它)。
但是,目标进程必须仍然具有相应地使用令牌的权限。例如,SE_IMPERSONATE模拟用户,SE_ASSIGN_PRIMARY由CPAU使用。当然,对于ImpersonalLoggedOnUser和CPAU,您可以在MSDN中阅读一些例外情况。

感谢您的链接-非常有用传递进程ID实际上是一个安全问题。有了它,一个用户可以以另一个用户(甚至是系统)的行为启动一个进程。oops-让ImpersonateNamedPipeClient():)成为一个有趣的想法,但我真的不确定在我的情况下如何安排它(服务器是Java的,我计划在派生需要执行一些安全检查的子进程时,通过JNI调用CreateProcessAsUser)。不过,我会详细研究一下,谢谢。