使用Kerberos身份验证模拟用户时建立ODBC连接

时间:2014-07-01 17:54:13

标签: c++ winapi odbc kerberos kerberos-delegation

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

如果用户已经过身份验证,我可以在我的服务中获得一些令牌(TGT?),我需要在我的服务线程中调用哪些API来冒充最终用户?我将ImpersonateLoggedOnUser和ImpersonateSecurityContext视为可能的选项,但我不知道哪些适用于我的情况以及我需要具体的票证/令牌。

此外,我发现当用户已经过身份验证时,SetThreadToken也可以是一个选项。是吗?

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

1 个答案:

答案 0 :(得分:0)

如果不验证此流程,您应该尝试以下操作:

先决条件:如果您想使用约束委派,则需要Java 8.没有其他选项。来自Java 6的无约束作品。

客户端SPNEGO / Kerberos => Tomcat / Server 1(extract delegated credential with JGSS)=> Tomcat / Server 1获取下一层的服务票证,其中委托凭证=> C ++支持的服务器1(使用SSPI提取委托凭证)=>冒充等等。

请注意,您不能从Java调用ODBC,而只能从C / C ++调用ODBC,因此如果您想要同时保留在同一台机器上,请获取主机/的服务票据,然后继续使用C ++和ODBC。