SSO не работает между браузером и Keycloak, использующим федерацию пользователей с интеграцией Kerberos в Windows AD

SSO не работает между браузером и Keycloak, использующим федерацию пользователей с интеграцией Kerberos в Windows AD

Я пытаюсь заставить работать единый вход с помощью браузера (Chrome или Firefox) и keycloak, настроенного с доменом AD федерации пользователей (настроен Kerberos).

Сначала я представлю обзор того, что у меня есть, а затем добавлю больше подробностей.

Обзор:
Вызывая конечную точку авторизации ".../auth/realms/test_realm/protocol/openid-connect/auth" и используя tcpdump, я вижу:

  1. Браузер отправляет запрос get на конечную точку авторизации с необходимыми параметрами

  2. Keycloak отвечает правильно:
    - с ошибкой 401 Unauthorized
    - с заголовком "WWW-Authenticate: Negotiate"

  3. Браузер отправляет, я думаю, правильно новый запрос get:
    -с "Authorization: Negotiate TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAAAGFKAAAADw=="
    Это отправка токена spnego

  4. Keycloak отвечает «200 OK», но со страницей входа и без токена или URL-адреса обратного вызова у меня нет ошибок в журнале Keycloak

В: Что должен ответить keycloak? Должен отправить на URL обратного вызова какие-то файлы cookie, напримерKEYCLOAK_IDENTITиKEYCLOAK_SESSION, верно? С помощью этих куки я могу вызвать конечную точку токена, чтобы получить токен для использования в приложении.

В: есть идеи, чего не хватает? Я знаю, что там много деталей, но, возможно, не хватает чего-то очевидного.

При ручном входе я вызываю конечную точку login-actions/authenticate, которая возвращает файлы cookie KEYCLOAK_IDENTIT и KEYCLOAK_SESSION, которые я могу использовать для вызова конечной точки токена и получения токена.
Я использую того же пользователя, который вошел в систему из тестового домена, поэтому я знаю, что keycloak может аутентифицировать тестируемого пользователя.


Теперь с более подробной информацией

Для настройки Keycloak я следовал официальной документацииhttps://www.keycloak.org/docs/latest/server_admin/

На клиентской машине Windows (браузер Chrome или Firefox, протестировал оба):
- Я добавил URL-адрес в белый список
. - Я вызываю конечную точку авторизации с необходимыми параметрами.

В домене AD Windows Server 2019
- Я создал файл keytab с помощью:
ktpass /out testdomainlocal_keytab_file.keytab /princ HTTP/[email protected]/mapuser keycloak_kerberos /pass "somepass" /crypto Все /ptype KRB5_NT_PRINCIPAL /kvno 1
- Пользователь keycloak_kerberos существует в моем тестовом домене

В Linux rhel8.8 у меня keycloak 22.01
- Добавил машину Linux в тестовый домен с помощью «присоединения к области»
- Добавил настройку федерации пользователей для LDAP AD, которая вручную может аутентифицировать тестового пользователя LDAP
- Активировал интеграцию Kerberos с принципалом и keytab, созданным из машины AD
- Добавил информацию о домене в файл /etc/krb5.conf

При необходимости могу показать больше подробностей, но мне нужно анонимизировать информацию.

Связанный контент