Мое клиентское приложение / браузер проходит аутентификацию на моем сервере с использованием Kerberos. На сервере работает Apache / Tomcat, и он общается с моим сервисом, который работает на сервере. Мой сервис может распределять работу по другому сервису на другом компьютере, поэтому нам нужно настроить ограниченное делегирование. Мой сервис на сервере (на сервере или на другом компьютере) должен общаться с базой данных SQL Server, используя ODBC. Я хочу выдать себя за конечного пользователя (в AD). При чтении в режиме онлайн, чтобы выдать себя за конечного пользователя, кажется, что все, что мне нужно сделать, это сделать вызов SQLDriverConnect к драйверу ODBC в потоке, который олицетворяет конечного пользователя.
Если пользователь уже аутентифицирован, и я могу получить некоторый токен (TGT?) В своем сервисе, какой API мне нужно будет вызвать в моем сервисном потоке, чтобы выдать себя за конечного пользователя? Я вижу ImpersonateLoggedOnUser и ImpersonateSecurityContext в качестве вероятных вариантов, но я не знаю, какие из них применимы в моем случае и какой именно билет / токен мне нужен здесь.
Кроме того, я вижу, что SetThreadToken также может быть опцией, когда пользователь уже аутентифицирован. Это?
Мой сервис на C ++, а среда — Windows (7 или Server).
Не проверяя этот поток, вы должны попробовать следующее:
Предварительное условие: если вы хотите прибегнуть к ограниченному делегированию, вам понадобится Java 8. Никаких других опций. Неограниченные произведения из Java 6.
Клиент SPNEGO / Kerberos => Tomcat / Server 1 (извлечь делегированные полномочия с JGSS) => Tomcat / Server 1 получить билет службы для следующего уровня с делегированными учетными данными => Сервер 1 с поддержкой C ++ (извлечь делегированные учетные данные с помощью SSPI) => олицетворять и т. Д.
Обратите внимание, что вы не можете вызывать ODBC из Java, а только из C / C ++, поэтому, если вы хотите остаться на одном компьютере, получите билет службы для хоста / и переходите к C ++ и ODBC.