2

我的客户端应用程序/浏览器使用 Kerberos 对我的服务器进行身份验证。服务器运行 Apache/Tomcat,它与我在服务器上运行的服务通信。我的服务可以将工作分配给另一台机器上的另一个服务,因此我们需要设置约束委派。我在服务器上的服务(在服务器机器或另一台机器上)需要使用 ODBC 与 SQL Server 数据库通信。我想冒充最终用户(在 AD 中)。从在线阅读到模拟最终用户,似乎我需要做的就是在模拟最终用户的线程上对 ODBC 驱动程序进行 SQLDriverConnect 调用。

如果用户已经通过身份验证并且我可以在我的服务中获得一些令牌(TGT?),我需要在我的服务线程中调用什么 API 来模拟最终用户?我认为 ImpersonateLoggedOnUser 和 ImpersonateSecurityContext 是可能的选项,但我真的不知道哪些适用于我的情况,以及我在这里需要什么具体的票证/令牌。

另外,我看到当用户已经通过身份验证时,SetThreadToken 也可以是一个选项。是吗?

我的服务是 C++,环境是 Windows(7 或 Server)。

4

1 回答 1

0

在不验证此流程的情况下,您应该尝试以下操作:

先决条件:如果您想诉诸约束委派,您将需要 Java 8。没有其他选择。来自 Java 6 的不受约束的作品。

客户端 SPNEGO/Kerberos => Tomcat/Server 1(使用 JGSS 提取委托凭证)=> Tomcat/Server 1 使用委托凭证获取下一层的服务票证 => C++ 支持的服务器 1(使用 SSPI 提取委托凭证)=> 模拟等.

请注意,您不能从 Java 调用 ODBC,而只能从 C/C++ 调用,因此如果您希望两者都在同一台计算机上,请获取主机/服务票证并继续使用 C++ 和 ODBC。

于 2014-07-02T20:30:47.643 回答