クライアント アプリケーション/ブラウザは、Kerberos を使用してサーバーに対して認証します。サーバーは Apache/Tomcat を実行し、サーバー上で実行される私のサービスと通信します。私のサービスは、別のマシン上の別のサービスに作業を分散できるため、制約付き委任を設定する必要があります。サーバー (サーバー マシンまたは他のマシン) 上のサービスは、ODBC を使用して SQL Server データベースと通信する必要があります。エンド ユーザーになりすます (AD で)。オンラインで読むと、エンド ユーザーを偽装するには、エンド ユーザーを偽装するスレッドで SQLDriverConnect を ODBC ドライバーに呼び出すだけでよいようです。
ユーザーが既に認証されていて、サービスで何らかのトークン (TGT?) を取得できる場合、エンド ユーザーになりすますためにサービス スレッドでどの API を呼び出す必要がありますか? ImpersonateLoggedOnUser と ImpersonateSecurityContext が可能性の高いオプションだと思いますが、私の場合にどれが適用されるのか、ここで具体的に必要なチケット/トークンはわかりません。
また、ユーザーが既に認証されている場合、 SetThreadToken もオプションになることがわかります。それは...ですか?
私のサービスは C++ であり、環境は Windows (7 またはサーバー) です。