Top.Mail.Ru

Эффективное управление доступом: введение в Keycloak

В этой серии статей мы шаг за шагом рассматриваем полный путь работы с Keycloak — от установки и создания администратора до настройки realm, добавления клиентов и управления пользователями.

Что такое Keycloak и зачем он нужен бизнесу и разработчикам

Keycloak - это программный продукт с открытым исходным кодом, который обеспечивает единый вход с управлением идентификацией и управлением доступом для современных приложений и сервисов. Основной целью инструмента является создание безопасных приложений и сервисов с минимальным написанием кода для аутентификации и авторизации. Фактически, можно сказать, что Keycloak является инструментом, который реализует SSO. Однако, он включает в себя и другие возможности. Поддержка Keycloak осуществляется RedHat Inc.

Компания Software Cats уже более пяти лет занимается аутстафом и аутсорсом по направлениям

Если у вас есть ИТ-проблема, оставьте ваши контакты, и мы поможем составить план ее решения.

Основные возможности Keycloak: от SSO до интеграции с LDAP

  • регистрация пользователей;
  • поддержка стандартов OpenID Connect, SAML и протокола OAuth2.0;
  • возможность авторизации через внешние системы аутентификации, например, социальные сети или другие ресурсы, которые уже предустановлены в Keycloak;
  • единый вход (SSO) для всех приложений в рамках одной области управления (realm);
  • выдача JWT токена;
  • настройка двухфакторной аутентификации;
  • интеграция с LDAP и Kerberos;
  • возможность настраивать внешний вид страницы, где вводится логин и пароль, для каждой области управления (realm);
  • расширение возможностей Keycloak своими плагинами;
  • поддержка создания кластера;
  • и другие возможности, которые можно почитать в документации.

Базовые определения в Keycloak простыми словами

В документации приведён полный список терминов и определений. В данной статье мы рассмотрим основные понятия, без понимания которых невозможно разобраться в принципах работы Keycloak и эффективно применять его на практике.

IAM (система управления идентификацией и доступом) - это система, которая обеспечивает безопасный доступ к ресурсам компании (базам данных, электронной почте, приложениям и другим данным). Она гарантирует, что доступ получат только проверенные пользователи и с минимальным количеством помех.

Технология единого входа (Single Sign-On, SSO) - это технология, при использовании которой пользователь переходит из одного раздела портала в другой, либо из одной системы в другую, не связанную с первой системой, без повторной аутентификации.

JSON Web Token (JWT) - это открытый стандарт (RFC 7519) для создания токенов доступа, основанный на формате JSON. Как правило, используется для передачи данных для аутентификации в клиент-серверных приложениях. Токены создаются сервером, подписываются секретным ключом и передаются клиенту, который в дальнейшем использует данный токен для подтверждения подлинности аккаунта.

OpenID Connect представляет собой аутентификационную надстройку над протоколом авторизации OAuth2.0. OpenID Connect позволяет интернет-ресурсам проверить личность пользователя на основе аутентификации, выполненной авторизационным сервером. Для работы используется RESTful API, описанный в спецификации. Также в OpenID Connect определены дополнительные механизмы для надёжного шифрования и цифровой подписи. Стандарт позволяет использовать дополнительные возможности, такие как управление сессиями и обнаружение OpenID-провайдеров.

OAuth 2.0 - открытый протокол (схема) авторизации, обеспечивающий предоставление третьей стороне ограниченного доступа к защищённым ресурсам пользователя без передачи ей (третьей стороне) логина и пароля.
Roles (роли). Роли определяют тип или категорию пользователя. admin, user, manager, employee - это типичные роли, которые могут существовать в организации. Приложения часто предоставляют доступ и разрешения конкретным ролям, а не отдельным пользователям, поскольку работа с пользователями может быть слишком детализированной и сложной в управлении.

Groups (Группы). Группы управляют группами пользователей. Для группы можно задать атрибуты. Также можно сопоставить роли с группой. Пользователи, которые становятся членами группы, наследуют атрибуты и сопоставления ролей, заданные группой.

Realms (области управления). Область управления содержит набор пользователей, учетных данных, ролей и групп. Пользователь принадлежит к области управления и входит в неё. Области управления изолированы друг от друга и могут управлять только теми пользователями, которые находятся под их контролем, и проверять их подлинность.

Clients (клиенты) - это сущности, которые могут запрашивать у Keycloak аутентификацию пользователя. Чаще всего клиентами являются приложения и сервисы, которые хотят использовать Keycloak для собственной защиты и обеспечения единого входа. Клиентами также могут быть сущности, которые просто хотят запросить идентификационные данные или токен доступа, чтобы безопасно вызывать другие сервисы в сети, защищённые Keycloak.
Identity provider (поставщики идентификаций). Поставщик идентификаций (IDP) — это сервис, который может аутентифицировать пользователя. Keycloak — это IDP.

Identity provider federation (федерация поставщиков идентификаций). Keycloak можно настроить таким образом, чтобы он делегировал аутентификацию одному или нескольким поставщикам удостоверений. Вход через социальные сети, например Facebook или Google, — это пример объединения поставщиков удостоверений. Вы также можете настроить Keycloak таким образом, чтобы он делегировал аутентификацию любому другому поставщику удостоверений OpenID Connect или SAML 2.0.

Authentication Context Class Reference (ACR, Ссылка на класс контекста аутентификации) - это необязательный параметр, который используется в запросах SAML и OpenID Connect (OIDC). Этот параметр позволяет поставщикам услуг отправлять поставщику удостоверений дополнительную информацию, чтобы поставщик удостоверений мог обеспечить дополнительную защиту в процессе аутентификации пользователя, то есть указать бизнес-правила, которые необходимо соблюдать при аутентификации. В некоторых контекстах ACR называют уровнем защиты (LoA).

Преимущества Keycloak для современных приложений

  1. Keycloak является полноценным решением IAM. Это готовый продукт для управления пользователями, аутентификацией, авторизацией, ролями и т.д., что позволяет избавиться от необходимости реализовывать этот функционал самостоятельно, а это может значительно затормозить разработку и поддержку основного функционала.
  2. Ранее в статье говорилось о поддержке стандартов и протоколов, что также является преимуществом, так как это обеспечивает совместимость с практически со всеми приложениями и сервисами.
  3. Реализация SSO. Позволяет пользователю войти один раз и получить доступ к нескольким приложений без повторной аутентификации, а также иметь только один логин и пароль. Также это обеспечивает безопасность, так как вы не вводите логин и пароль в каждом приложении, а предоставляете доступ, который вы можете всегда отозвать. Например, вход на какой-то ресурс с помощью ГосУслуг, где вы дайте согласие на доступ к вашим данным и вы видите, какие данные запрашивает приложение.
  4. Интеграция с внешними системами при помощи LDAP. В разных системах может быть своя БД пользователей, а данная интеграция позволяет централизованно управлять учетными записями.
  5. Возможность кастомизации страницы входа и регистрации для каждого realm.
  6. Настройка собственных политик доступа, ролей и сопоставление ролей с другими системами.
  7. Поддержка масштабируемости и отказоустойчивости с помощью кластеризации. Работа с общей БД и распределенным кэшем позволяет масштабировать систему.
  8. Раздельный интерфейс и доступ для обычных пользователей и администратора Keycloak.
  9. Встроенные механизмы защиты, двухфакторная аутентификация, защита от CSRF и т.д.
  10. Активное сообщество и регулярные обновления.
  11. Аудит и логирование действий.

Эти преимущества делают Keycloak мощным и удобным решением для организаций, которым нужна надежная, гибкая и масштабируемая система управления идентификацией и доступом.

Недостатки Keycloak: с какими сложностями можно столкнуться

  1. Возможно, что новичкам будет не сразу понятно, как все настраивать из-за большого функционала Keycloak. Поэтому необходимо обучение, чтобы понимать какая настройка и за что отвечает.
  2. Так как это монолитный продукт, то могут возникнуть проблемы с производительностью при большом кол-ве запросов. В целом необходимо нагрузочное тестирование, чтобы понять, подходит ли данный вариант под задачу или нет. Если нет, то у Keycloak есть возможность кластеризации.
  3. Ограниченная поддержка ABAC модели. В основном Keycloak ориентирован на RBAC модель. Модель ABAC реализуется через механизм политик авторизации. Обычно этого может быть достаточно, но если необходимо реализовать что-то более сложное, тогда применяется кастомизация политик через Java или JavaScript.
  4. Не поддерживает ReBAC. Для его реализации необходимо создавать кастомные политики, интегрировать внешние системы, где хранятся и обрабатываются отношения между объектами.

Сценарии использования Keycloak в реальных проектах

  1. Настройка единого входа для веб-приложений и мобильных приложений.
  2. Настройка многофакторной аутентификации, например, в финансовом секторе.
  3. Центральное управление пользователями. Объединение в группы, организации и выдача ролей.
  4. Настройка единого входа для корпоративных систем с интеграцией по LDAP.
  5. Создание нескольких областей управления (realm) в больших архитектурных системах, например, облачных, где в каждом realm будут свои клиенты, роли, политики безопасности и т.д.
  6. Защита REST API в микросервисной архитектуре. Выдача JWT токена, ограничение на основе ролей.

Keycloak - это надёжное решение для аутентификации и авторизации, которое уже «из коробки» закрывает большинство задач по управлению доступом. В этой статье мы разобрали основы, а в следующих материалах можно перейти к практике: установке, настройке realm и интеграции с приложениями.

Хотите попробовать Keycloak в действии?
В следующей статье мы подробно разберём его установку с применением Docker Compose.
Наша команда уже более пяти лет занимается реализацией проектов на Java и усилением команд по направлениям

За время существования компании, мы принимали участие в работе над более чем 100 проектами различного объема и длительности.

Если перед вами стоят вызовы, при которых вам может пригодится наша экспертиза, просто напишите нам,

Мы договоримся с вами об онлайн-встрече, чтобы подробнее обсудить ваш проект и вашу проблему.
Кирилл Буханцов
Java developer

Еще почитать по теме:

    Обсудить проект _
    Если у вас есть ИТ-проблема , оставьте свои контакты, и мы поможем правительству спланировать ее решение . Обещаем не рассылать спам.
    hello@softwarecats.dev
    Новосибирск, ул. Демакова
    23/5, оф.308
    Контакты _

    Выполненные проекты: