Как GSSManager.createCredential получает ключ Kerberos и TGT?

У меня есть следующий сценарий: у меня есть сервер, работающий внутри базы данных Oracle (с Java SE 6), который подключается к веб-службе с помощью HTTP-клиента Apache (на Java). Веб-сервис должен быть защищен с помощью Kerberos, то есть с аутентификацией SPNEGO.

На моем сервере есть принципал Kerberos со случайным ключом, экспортированным в keytab, а затем импортированным в таблицу базы данных. Итак, у меня есть KerberosPrincipal с рядом связанных объектов KerberosKey (по одному для каждого метода шифрования), вся эта информация собрана в Subject.

Я ожидаю, что следующим шагом будет обращение в KDC, чтобы получить TGT и сохранить его в теме. Как мне это сделать? Вся документация, которую я нашел по этому вопросу, предполагает, что это происходит в модуле входа в систему, но в моем сценарии нет входа в систему. Или кто-то из нижеперечисленных позвонит мне в KDC?

Теперь мне нужно вызвать GSSManager.createCredential, чтобы создать GSSCredential, который я могу обернуть в KerberosCredentials и BasicCredentialsProvider, которые я могу добавить в HttpClientContext, чтобы HttpClient мог выполнять аутентификацию SPNEGO.

Но как мне получить информацию из моей темы в GSSCredential?


person Karsten Spang    schedule 21.03.2016    source источник


Ответы (1)


Покопавшись в Интернете около недели, я наконец нашел ответ здесь. Фрагмент из этого документа:

  1. Приложение вызывает логин JAAS, который, в свою очередь, вызывает настроенный модуль Krb5LoginModule.
  2. Krb5LoginModule получает TGT (KerberosTicket) для пользователя либо из KDC, либо из существующего кэша билетов и сохраняет этот TGT в наборе личных учетных данных субъекта.
  3. Приложение извлекает заполненный субъект, затем вызывает Subject.doAs/doAsPrivileged, который помещает этот субъект в контекст управления доступом потока, выполняющего ClientAction.
  4. ClientAction вызывает метод GSSManager.createCredential, передавая ему OID Kerberos V5 в желательных мехах.
  5. GSSManager.createCredential вызывает поставщика GSS-API Kerberos V5, запрашивая учетные данные Kerberos для инициирования контекстов безопасности.
  6. Поставщик Kerberos получает Subject из текущего контекста управления доступом и ищет в своем частном наборе учетных данных действительный KerberosTicket, который представляет TGT для пользователя.
  7. KerberosTicket возвращается в GSSManager, который сохраняет его в экземпляре контейнера GSSCredential для возврата вызывающей стороне.
person Karsten Spang    schedule 22.03.2016