Как настроить SSO Keycloak для бесшовного входа между сервисами
Проблема повторной авторизации при переходе между сервисами, которые используют один и тот же Keycloak realm, знакома многим администраторам. Вместо того чтобы автоматически попадать в приложение, пользователь каждый раз видит экран входа или вынужден нажимать кнопку «Войти через Keycloak». В этой статье разберём причины такого поведения и способы настройки настоящего единого входа (SSO).
Почему Keycloak не сохраняет сессию между сервисами
Основная причина - неправильная конфигурация cookie-сессий или доменов. Если ваши сервисы находятся на разных поддоменах (например, a.tech.com и b.tech.com), а cookie сессии Keycloak установлено только для основного домена, браузер не будет передавать его между поддоменами. Также проблема может возникать, если сервисы используют разные клиентские ID или не настроен общий cookie domain.
Настройка cookie domain для общего SSO
Чтобы Keycloak корректно поддерживал единый вход для всех сервисов на одном домене, выполните следующие шаги:
- Перейдите в админ-панель Keycloak → Realm Settings → Tokens.
- В поле Cookie Domain укажите общий домен, например
.tech.com(с точкой в начале). Это позволит браузеру отправлять cookie для всех поддоменов. - Убедитесь, что все сервисы используют один и тот же realm и настроены на один Keycloak URL.
Проверка клиентских настроек и протокола
Каждый сервис должен быть зарегистрирован как отдельный клиент в Keycloak, но все они должны быть в одном realm. Важно, чтобы в настройках клиента был включён параметр Standard Flow и установлен корректный Valid Redirect URIs. Если сервисы используют OpenID Connect, убедитесь, что они обмениваются токенами через один и тот же Keycloak endpoint. Иногда помогает принудительное использование SSO Session Idle и SSO Session Max с большими значениями.
Использование session cookie вместо persistent cookie
Кнопка «Запомнить меня» создаёт долгоживущую cookie, но это не решает проблему, если сессия не синхронизируется. Вместо этого настройте Session Cookie с атрибутом SameSite=None; Secure для кросс-доменного использования. Если сервисы работают по HTTPS, это обязательное условие. Также проверьте, что время жизни сессии (Session Timeout) не слишком мало.
Offline токены и их роль в SSO
Вы упомянули, что настройка offline токена не помогла. Offline токены предназначены для долгоживущего доступа без участия пользователя (например, для фоновых задач), но не для браузерной SSO-сессии. Для бесшовного входа между сервисами в браузере ключевую роль играют cookie сессии Keycloak, а не offline токены. Отключите offline токены, если они не нужны, чтобы не усложнять конфигурацию.
Диагностика: как проверить, что мешает SSO
Откройте инструменты разработчика в браузере (F12) и перейдите на вкладку Application → Cookies. Проверьте, есть ли cookie с именем KEYCLOAK_SESSION или KEYCLOAK_IDENTITY для домена вашего Keycloak. Если cookie нет при переходе на другой сервис - значит, проблема в настройке домена. Также убедитесь, что браузер не блокирует сторонние cookie (Third-party cookies).
Проверка сетевых запросов
На вкладке Network фильтруйте запросы по адресу Keycloak. При переходе между сервисами должен быть автоматический редирект на Keycloak с параметром prompt=none - это значит, что система пытается восстановить сессию без участия пользователя. Если вместо этого вы видите страницу логина - сессия не найдена.
Если после всех настроек проблема сохраняется, попробуйте временно отключить все блокировщики рекламы и расширения браузера - они могут удалять cookie сессии.