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

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

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

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

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

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

1 ответ

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

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