Windows上的CreateProcessAsUser如何使用来自SSPI的委托凭据?

时间:2013-05-31 09:51:59

标签: c++ windows sspi createprocessasuser

我使用以下命令处理Kerberos登录基础结构(单点登录)

  1. 通过Kerberos密钥分发进行身份验证的客户端 中心。
  2. 使用Kerberos作为身份验证的主要服务服务器。
  3. 服务器程序用C ++编写。

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

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

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

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

    先谢谢你的帮助

3 个答案:

答案 0 :(得分:0)

我刚刚发布了一个与您正在做的事情相关的问题。我正在使用会话0 Windows服务将应用程序启动到会话1.我使用的代码(并询问)包括in that post,并且运行良好,但会话1中用户通常可用的路径无法访问当这样开始的时候。无论如何,即使我对这段代码有一些疑问,我希望它可以让你走上正确的道路。

Ryyker

答案 1 :(得分:0)

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

最好的方法是:

  1. 将委派的凭据写入临时文件中。
  2. 将KRB5CCNAME环境变量设置为此文件的路径。
  3. 有效;)

答案 2 :(得分:0)

尽管已经很晚了,但是您可以通过执行以下操作获得令牌:

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