如何在Windows上使用来自SSPI的委托凭证创建processasuser

How CreateProcessAsUser on Windows Using Delegated Credentials from SSPI?

本文关键字:SSPI 凭证 processasuser 创建 Windows      更新时间:2023-10-16

我在一个Kerberos登录基础设施(单点登录)上工作:

  1. 通过Kerberos密钥分发身份验证的客户端中心。
  2. 使用Kerberos作为身份验证的主体服务服务器。

服务器程序用c++编写。

在我的主体(客户端)和服务主体(服务器)之间创建上下文没有问题。我还将我的客户端凭据委托给服务器,因为我需要使用客户端用户凭据在服务器上创建一个进程。

这是我的问题,在服务器端,我有一个SSPI上下文,我需要使用Windows类型pHandle创建processasuser。

我不知道如何使用我的SSPI凭证在我的服务器上创建一个进程作为客户端用户。

我看了看LsaLogonUser,这似乎做了我想要的(从kerberos用户凭据创建一个句柄),但我的问题是一样的,我不知道如何使用这个LsaLogonUser的SSPI令牌。

提前感谢您的帮助

虽然很晚,但您可以通过以下操作获得令牌:

HANDLE tempHandle;
 if (!QuerySecurityContextToken(hctxt, &tempHandle))
 {
   MyDbg("Could not obtain token for user");
 }

我刚刚发布了一个关于你正在做的事情的问题。我使用会话0 Windows服务将应用程序启动到会话1。我使用的代码(并询问)包含在那篇文章中,除了会话1中用户通常可用的路径在以这种方式启动时无法访问外,工作得很好。无论如何,尽管我对这段代码有一些疑问,我希望它能让你走上正确的道路。

Ryyker

我终于找到解决问题的办法了。

最好的方法是:

  1. 在临时文件中写入委托凭证。
  2. 设置KRB5CCNAME环境变量为该文件的路径。