Что такое Keycloak и какие проблемы он решает?

«Что такое Keycloak и какие проблемы он решает?» — вопрос из категории Безопасность, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Keycloak — это open-source решение для управления идентификацией и доступом (Identity and Access Management — IAM), разработанное Red Hat. Оно предоставляет готовые функции аутентификации, авторизации и управления пользователями для современных приложений и микросервисов.

Ключевые возможности и решаемые проблемы:

  • Единый вход (Single Sign-On / SSO): Пользователь аутентифицируется один раз в Keycloak и получает доступ ко всем связанным приложениям без повторного ввода пароля. Поддерживаются протоколы OpenID Connect (OIDC) и SAML 2.0.
  • Централизованное управление пользователями: Хранение учетных записей, профилей, ролей и групп. Поддержка федерации с внешними провайдерами (LDAP/Active Directory, социальные сети).
  • Стандартная авторизация:
    • На основе ролей (RBAC): Назначение ролей пользователям и группам.
    • На основе атрибутов (ABAC): Гибкие политики доступа с использованием пользовательских атрибутов, контекста и ресурсов.
  • Безопасность API и микросервисов: Выпуск и валидация JWT (JSON Web Tokens) и OAuth 2.0 Access Tokens для обеспечения безопасного взаимодействия между сервисами.
  • Административный UI и REST API: Полноценный веб-интерфейс для администрирования и API для автоматизации.

Базовая архитектура взаимодействия (OIDC flow):

  1. Пользователь пытается получить доступ к защищенному приложению (Client).
  2. Приложение перенаправляет его на страницу логина Keycloak (Identity Provider).
  3. После успешной аутентификации Keycloak возвращает приложению id_token (JWT с информацией о пользователе) и access_token (для вызовов API).
  4. Приложение проверяет подпись и claims в JWT, не обращаясь к Keycloak при каждом запросе.

Пример конфигурации защищенного ресурс-сервера (Spring Boot):

# application.yml
spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: http://localhost:8080/auth/realms/my-realm

Keycloak избавляет разработчиков от необходимости самостоятельно реализовывать сложные механизмы безопасности, обеспечивая соответствие стандартам и централизованное управление политиками.