Что это значит

Прозрачный вход в домене работает так: браузер получает от Keycloak запрос Negotiate и присылает билет Kerberos. Проверить билет может только федерация пользователей с включённой поддержкой Kerberos: LDAP-провайдер с флагом проверки Kerberos или отдельный провайдер Kerberos. Если в realm такого нет, Keycloak пишет первое предупреждение и показывает обычную форму входа.

SPNEGO login failed: java.security.PrivilegedActionException значит, что провайдер есть, но билет проверить не удалось. Частые причины: keytab выписан на другое имя службы, чем адрес, по которому браузер обращается к Keycloak; в keytab нет нужного типа шифрования; часы сервера расходятся с контроллером домена (Clock skew too great).

Как проверить

  1. В консоли администратора realm, раздел User federation: есть ли провайдер с включённой аутентификацией Kerberos.
  2. Имя службы и содержимое keytab:
klist -kte /etc/keycloak/http.keytab

Имя должно быть HTTP/sso.example.ru@EXAMPLE.RU, где sso.example.ru тот адрес, который пользователь видит в браузере.

  1. На контроллере домена SPN зарегистрирован ровно у одной учётной записи: setspn -Q HTTP/sso.example.ru.
  2. Время на сервере Keycloak: chronyc tracking.

Что сделать

  1. Включить Kerberos в LDAP-провайдере realm: realm Kerberos, имя службы, путь к keytab. Или добавить отдельный провайдер Kerberos.
  2. Перевыпустить keytab на правильное имя службы с типами шифрования AES, если имя или шифрование не совпадают.
  3. Убрать дубли SPN в домене.
  4. Проверить вход с компьютера в домене, где адрес Keycloak добавлен в зону интрасети браузера.