代码之家  ›  专栏  ›  技术社区  ›  Matt Sheppard

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

  •  9
  • Matt Sheppard  · 技术社区  · 14 年前

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

    从我读过的文件来看( http://msdn.microsoft.com/en-us/library/ms682429%28VS.85%29.aspx ),我没有看到任何禁止此操作的内容,但可能令牌只能由创建它的线程或进程使用。

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

    3 回复  |  直到 14 年前
        1
  •  8
  •   ChristianWimmer    14 年前

    是的,那是可能的。您可以使用duplicatehandle来获取对目标进程有效的句柄(将新的句柄值发送到目标进程,这样它就知道了)。 但是,目标进程必须仍然具有相应地使用令牌的权限。例如,se_impersonate模拟用户,se_assign_primary由cpau使用。当然,您可以在msdn中读取impersonateloggedonuser和cpau的一些异常。

        2
  •  5
  •   Mark Wilkins    14 年前

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

        3
  •  4
  •   Michael Howard-MSFT    14 年前

    为什么不直接使用命名管道,然后调用impersonatenamedpipeuser()-这是安全和容易的!注意,执行模拟的过程 必须 有模仿的特权。