我的客户端应用程序/浏览器使用 Kerberos 对我的服务器进行身份验证。服务器运行 Apache/Tomcat,它与我在服务器上运行的服务通信。我的服务可以将工作分配给另一台机器上的另一个服务,因此我们需要设置约束委派。我在服务器上的服务(在服务器机器或另一台机器上)需要使用 ODBC 与 SQL Server 数据库通信。我想冒充最终用户(在 AD 中)。从在线阅读到模拟最终用户,似乎我需要做的就是在模拟最终用户的线程上对 ODBC 驱动程序进行 SQLDriverConnect 调用。
如果用户已经通过身份验证并且我可以在我的服务中获得一些令牌(TGT?),我需要在我的服务线程中调用什么 API 来模拟最终用户?我认为 ImpersonateLoggedOnUser 和 ImpersonateSecurityContext 是可能的选项,但我真的不知道哪些适用于我的情况,以及我在这里需要什么具体的票证/令牌。
另外,我看到当用户已经通过身份验证时,SetThreadToken 也可以是一个选项。是吗?
我的服务是 C++,环境是 Windows(7 或 Server)。