Я занимаюсь разработкой приложения с использованием аутентификации Kerberos в сценарии с двумя прыжками: клиент подключается к серверу, который должен использовать учетные данные клиента для подключения к серверу SQL.
Я уже сделал это с помощью GSoap и GSS-API из выпуска Kerberos MIT; но я бы хотел использовать WinHttp обрабатывать аутентификацию.
Тем не менее, когда я пытаюсь использовать winHTTP с GSOAP WINHTTP PLUGIN (gsoapwinhttp на code.google), делегирование заблокировано контроллером домена. Я хочу сохранить эту конфигурацию Active Directory:
Когда я смотрю на билет Kerberos GSS-API, я обнаружил несколько флагов, разрешающих делегирование, таких как fowardable или Deleg_req_flag:
Итак, мой вопрос: Могу ли я изменить флаги winHTTP, чтобы разрешить делегирование без изменения конфигурации контроллера домена?
Редактировать :
Я использую опцию WINHTTP_AUTH_SCHEME_NEGOTIATE
в setCredentials и WINHTTP_AUTOLOGON_SECURITY_LEVEL_LOW
в setOption обязательно использовать Kerberos или NTLM, как указано на веб-сайте Microsoft WinHttpSetCredentials.
Используя Fiddler, я проверил HTTP-соединение, и оно использует Kerberos, но я все еще не могу делегировать свой следующий сервер.
Я пытался использовать почти все возможные варианты setOption, такие как WINHTTP_ENABLE_SSL_REVERT_IMPERSONATION
или все, что может выглядеть как делегирование, но у меня странная ошибка при использовании этой опции:
Конец файла или нет ввода: передача сообщения прервана или истекла задержка (629s recv send delay)
Я попытался установить другое recv_timeout, но все еще та же ошибка.
.
Я изучал этот тип Керберос делегированию проблема много Вы испытываете проблему двойного прыжка Kerberos. В этом активный каталог Скриншот конфигурации, который вы предоставили, вы должен настроить делегирование; сейчас делегирование не установлено. Сначала попробуйте открыть делегирование, для этого выберите переключатель: Доверяйте этот компьютер для делегирования любому сервису (только Kerberos). Вы устанавливаете это для учетной записи компьютера в AD, которая должна использовать учетные данные клиента для подключения к серверу SQL, а не для учетной записи контроллера домена. Если ваше приложение на самом деле работает на контроллере домена, то это известная проблема и неподдерживаемая конфигурация, которая не будет работать — переместите приложение на рядовой сервер домена.
Что касается флагов, разрешающих делегирование, таких как fowardable или Deleg_req_flag, показанных как установленные в трассировке Fiddler, я не уверен, почему они отображаются как установленные, но они могли быть установлены с неправильной учетной записи. На основании размещенного вами снимка экрана делегирование Kerberos вообще не настроено.
В вашем сценарии вы должны установить делегирование Kerberos для учетной записи компьютера, на котором выполняется процесс WinHTTP, в приведенном ниже примере это будет «Server1».
В свойствах делегирования Kerberos этой учетной записи вы можете указать либо открытое делегирование (верхняя кнопка-переключатель, как я уже говорил выше), либо ограниченное делегирование процессу на сервере Server2, на который сервер Server1 может перенаправлять учетные данные пользователя (билеты службы Kerberos).
Других решений пока нет …