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