
Я пытаюсь заставить работать единый вход с помощью браузера (Chrome или Firefox) и keycloak, настроенного с доменом AD федерации пользователей (настроен Kerberos).
Сначала я представлю обзор того, что у меня есть, а затем добавлю больше подробностей.
Обзор:
Вызывая конечную точку авторизации ".../auth/realms/test_realm/protocol/openid-connect/auth" и используя tcpdump, я вижу:
Браузер отправляет запрос get на конечную точку авторизации с необходимыми параметрами
Keycloak отвечает правильно:
- с ошибкой 401 Unauthorized
- с заголовком "WWW-Authenticate: Negotiate"Браузер отправляет, я думаю, правильно новый запрос get:
-с "Authorization: Negotiate TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAAAGFKAAAADw=="
Это отправка токена spnegoKeycloak отвечает «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
При необходимости могу показать больше подробностей, но мне нужно анонимизировать информацию.