SSO и Keycloak: realm, client, roles

↑ 5.5 Аутентификация и доступ: Keycloak, SSO, ACL · ← Предыдущая · → Следующая

Обязательно~3 мин чтенияУровень: middle

Зачем это на собесе

Что такое SSO и как в Keycloak настраивают realm, клиентов и роли.

Объяснение

SSO (Single Sign-On) — один вход для многих приложений: сессия живёт у провайдера идентичности (IdP), приложения доверяют ему.

Keycloak — open-source IdP (OIDC, SAML, OAuth 2.0): SSO, MFA, федерация с LDAP/AD и соцсетями, управление пользователями и ролями, админ-консоль.

ПонятиеСмысл
Realmизолированное пространство: пользователи, клиенты, роли, настройки (обычно один realm на продукт/тенанта)
Clientприложение, использующее Keycloak; типы: public (SPA) и confidential (бэкенд, с secret)
User / Groupпользователи и их группировка
Realm roles / Client rolesроли на уровне realm или конкретного клиента
Composite rolesроль, включающая другие
Client scopes / Mappersкакие claims попадут в токен (роли, группы, атрибуты, audience)
Identity providersвнешние IdP (Google, AD/LDAP, SAML)
Authentication flowsцепочки шагов входа (пароль, OTP, WebAuthn)
SessionsSSO-сессия, offline-токены
Themesбрендирование страницы входа
Service accountsclient credentials для сервисов

Настройка SPA-клиента: Client type OpenID Connect, Public, Standard flow + PKCE (S256), Valid redirect URIs, Web origins (CORS), Front-channel logout.

Роли в токене: realm_access.roles и resource_access.<client>.roles; mapper «audience» добавляет aud для API; при необходимости «flat» claim roles.

{ "sub": "…", "preferred_username": "anna", "email": "a@x.ru", "realm_access": { "roles": ["user"] }, "resource_access": { "orders-api": { "roles": ["orders:write"] } }, "aud": ["orders-api"] }

Логаут: /logout с id_token_hint и post_logout_redirect_uri завершает SSO-сессию (иначе вход произойдёт автоматически).

Многопользовательская схема: realm на клиента (полная изоляция) или organizations внутри realm.

Нюансы и подводные камни

  • Неверные redirect_uri/Web origins — типичная причина ошибок входа и CORS.
  • Роли в токене раздувают его: используйте client roles и только нужные scopes.
  • Настройка Keycloak «руками» не воспроизводима: экспортируйте realm/используйте Terraform или keycloak-config-cli.
  • Время жизни токенов и сессий настраивается отдельно (Access Token Lifespan, SSO Session Idle/Max).
  • Обновление Keycloak меняет поведение: следите за релизами.

Практика

  1. Поднимите Keycloak в Docker, создайте realm, client (public, PKCE) и роли.
  2. Добавьте mapper для audience и ролей в токен.
  3. Проверьте logout и SSO между двумя клиентами.

Вопросы с ответами

Связанные темы