К содержанию

Wiki · Технологии разработки

Keycloak

Содержание 5 разделов

    Keycloak – это сервер единого входа (SSO) и управления доступом с открытым кодом: пользователь входит один раз и попадает во все подключённые приложения, а права задаются ролями в одном месте. Проект распространяется под лицензией Apache 2.0 и, по данным его сайта, входит в инкубатор Cloud Native Computing Foundation.

    Представьте компанию, у которой есть сайт с личным кабинетом клиента, портал для сотрудников, CRM и пара внутренних сервисов. В каждом свой логин и пароль, своя таблица пользователей и своя логика «кому что можно». Сотрудник увольняется, а доступ ему закрывают в пяти местах и в одном забывают. Keycloak забирает вход и права на себя, а приложения перестают хранить пароли.

    Что Keycloak берёт на себя вместо каждого приложения

    • Единый вход и единый выход: вошли в портал, и CRM уже открыта; вышли в одном месте, сессии закрылись везде.
    • Страницы входа, регистрации, восстановления пароля и двухфакторной аутентификации.
    • Вход через внешние системы: соцсети и другие провайдеры по OpenID Connect или SAML 2.0. Про вход через Госуслуги рассказываем в отдельной статье ЕСИА.
    • Подключение существующего каталога сотрудников в LDAP или Active Directory, чтобы не заводить учётки заново.
    • Личный кабинет пользователя самого Keycloak: профиль, пароль, активные сессии, связанные аккаунты.

    Realm, клиенты, роли и группы: словарь для заказчика

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

    ТерминЧто означаетПример
    Realmотдельное пространство со своими пользователями, приложениями и ролями«клиенты» и «сотрудники» в разных realm
    Клиент (client)приложение, которое просит Keycloak проверить пользователяличный кабинет, портал, мобильное приложение
    Рольтип пользователя с набором прав: общая для realm или только для одного клиентаменеджер, бухгалтер, партнёр
    Группанабор пользователей, которые наследуют её роли и атрибуты«Отдел продаж» получает роль менеджера

    Служебный realm master документация советует использовать только для создания других realm и администрирования. Пользователей приложений заводят в отдельных пространствах.

    Схема Keycloak: в одном realm находятся клиенты (приложения), роли и группы пользователей, которые наследуют роли
    Как в Keycloak устроены доступы

    OpenID Connect и SAML без формул

    Оба протокола решают одну задачу: приложение не спрашивает пароль само, а отправляет человека к Keycloak и получает обратно подтверждение, кто это и какие у него роли.

    OpenID Connect построен поверх OAuth 2.0 и передаёт данные в виде токенов (JSON Web Token). Он удобен веб-сайтам, мобильным приложениям и сервисам с API, поэтому для новых проектов его выбирают чаще. SAML 2.0 старше, передаёт подписанные XML-документы и нужен, когда подключают корпоративные системы, которые умеют работать только с ним.

    Схема единого входа через Keycloak: личный кабинет отправляет пользователя на вход и получает токен, портал открывается без повторного пароля
    Как проходит единый вход

    Частая ошибка настройки: слишком широкий список разрешённых адресов возврата (redirect URI) у клиента. Чем он уже, тем меньше шансов, что токен уйдёт на чужой адрес. Это проверяют до запуска вместе с остальными настройками безопасности.

    Когда Keycloak нужен, а когда хватит входа на сайте

    Если у вас один сайт на 1С-Битрикс с личным кабинетом покупателя, отдельный сервер входа обычно не нужен: CMS сама хранит пользователей, группы и права. Keycloak окупается, когда приложений несколько и пользователи у них общие: личный кабинет клиента, партнёрский портал, мобильное приложение, внутренние сервисы. Ещё один повод – требование входить по корпоративной учётной записи из Active Directory.

    Keycloak ставят на собственный сервер, часто в Docker, данные он хранит во внешней базе, например PostgreSQL. Отдельной платы за использование открытой версии нет, но сервер входа становится критичной точкой: если он лёг, не войдёт никто. Поэтому закладывайте резервирование, обновления и мониторинг, а вход в CMS и другие приложения подключайте через стандартные протоколы или готовые адаптеры, а не самописной интеграцией.

    Единый вход через Keycloak: протоколы, роли и API

    Чем OpenID Connect отличается от SAML в Keycloak?

    OpenID Connect передаёт данные о пользователе в токенах JSON и подходит сайтам, мобильным приложениям и API. SAML передаёт подписанные XML-документы и нужен для корпоративных систем, которые понимают только его. В одном realm Keycloak можно держать клиентов на обоих протоколах, а для нового проекта без старых корпоративных систем обычно хватает одного OpenID Connect.

    Как разграничить права менеджеров и партнёров через Keycloak?

    Права в Keycloak задают ролями: менеджеру одна роль, партнёру другая, а приложение по роли из токена решает, какие разделы показать. Удобнее назначать роли группам, тогда новому сотруднику достаточно добавить группу.

    Что умеет API Keycloak?

    Admin REST API Keycloak позволяет из других систем создавать пользователей, назначать им роли и группы, настраивать клиентов.

    Где хранить пользователей, если сотрудники уже есть в Active Directory?

    Сотрудники остаются в Active Directory, а Keycloak подключается к нему через федерацию пользователей и проверяет пароли там же. Учётки заново не заводят, а увольнение в AD сразу закрывает доступ ко всем приложениям за Keycloak.

    Единый вход, роли и права доступа проектируем при разработке личного кабинета и внутреннего корпоративного портала. Если проект уже работает на Keycloak, берём его на поддержку.

    Источники

    • Сайт Keycloak: описание возможностей
    • Документация Keycloak: Server Administration Guide
    • Репозиторий Keycloak: лицензия Apache 2.0

    Остались вопросы по теме «Keycloak»?

    Напишите нам в Telegram или MAX. Ответит специалист, который отвечает за эту тему, или руководитель проектов в рабочее время.

    Сергей ЧерняковОтвечает по темеСергей ЧерняковWeb-разработчик

    Посчитайте стоимость проекта за 2 минуты

    Калькулятор соберёт смету по нашим тарифам: сайт, дизайн, интеграции и поддержка.