Браузер прислал билет Kerberos, а Keycloak не настроен его проверять
«Received kerberos token, but there is no user storage provider that handles kerberos credentials» и «SPNEGO login failed: java.security.PrivilegedActionException» в журнале Keycloak: прозрачный вход по Kerberos не работает. Что включить в федерации пользователей и как проверить keytab и SPN.
Что это значит
Прозрачный вход в домене работает так: браузер получает от Keycloak запрос Negotiate и присылает билет Kerberos. Проверить билет может только федерация пользователей с включённой поддержкой Kerberos: LDAP-провайдер с флагом проверки Kerberos или отдельный провайдер Kerberos. Если в realm такого нет, Keycloak пишет первое предупреждение и показывает обычную форму входа.
SPNEGO login failed: java.security.PrivilegedActionException значит, что провайдер есть, но билет проверить не удалось. Частые причины: keytab выписан на другое имя службы, чем адрес, по которому браузер обращается к Keycloak; в keytab нет нужного типа шифрования; часы сервера расходятся с контроллером домена (Clock skew too great).
Как проверить
- В консоли администратора realm, раздел User federation: есть ли провайдер с включённой аутентификацией Kerberos.
- Имя службы и содержимое keytab:
klist -kte /etc/keycloak/http.keytab
Имя должно быть HTTP/sso.example.ru@EXAMPLE.RU, где sso.example.ru тот адрес, который пользователь видит в браузере.
- На контроллере домена SPN зарегистрирован ровно у одной учётной записи:
setspn -Q HTTP/sso.example.ru. - Время на сервере Keycloak:
chronyc tracking.
Что сделать
- Включить Kerberos в LDAP-провайдере realm: realm Kerberos, имя службы, путь к keytab. Или добавить отдельный провайдер Kerberos.
- Перевыпустить keytab на правильное имя службы с типами шифрования AES, если имя или шифрование не совпадают.
- Убрать дубли SPN в домене.
- Проверить вход с компьютера в домене, где адрес Keycloak добавлен в зону интрасети браузера.
Ошибка повторяется?
Запустите Диагностика: за полминуты он покажет состояние базы, брокера, поиска и сервера. С отчётом разберём причину за 30 минут бесплатного созвона.
Написать