Открыть сервис

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

Keycloak — это программный продукт с открытым исходным кодом для аутентификации и управления доступом (IAM), разработанный на языке Java и распространяемый под лицензией Apache 2.0. Проект был создан компанией Red Hat и в 2018 году передан под управление фонда Cloud Native Computing Foundation (CNCF), где получил статус инкубационного проекта. Keycloak позволяет централизованно управлять учетными записями пользователей, реализовывать единый вход (SSO) и делегировать аутентификацию внешним приложениям, выступая в роли провайдера удостоверений и посредника между клиентскими сервисами и базами пользователей.

История и развитие

Первая версия Keycloak была выпущена в 2014 году. Изначально продукт позиционировался как решение для упрощения интеграции аутентификации в веб-приложения и мобильные сервисы. В 2016 году проект был включен в состав платформы Red Hat JBoss Middleware, а затем стал основой коммерческого продукта Red Hat Single Sign-On (RH-SSO). В 2018 году, после передачи проекта в CNCF, началось активное развитие сообщества, что привело к регулярным релизам и расширению функциональности. К 2024 году Keycloak стал одним из самых распространенных самоуправляемых решений для управления идентификацией, используемым как в корпоративном секторе, так и в государственных информационных системах.

Ключевые возможности

Единый вход (SSO)

Основное назначение Keycloak — предоставление механизма единого входа. Пользователь проходит аутентификацию один раз на центральном сервере, после чего получает доступ к нескольким приложениям без повторного ввода учетных данных. Это достигается за счет использования стандартизированных протоколов: OAuth 2.0, OpenID Connect (OIDC) и SAML 2.0. OpenID Connect является предпочтительным протоколом для современных веб-приложений, тогда как SAML чаще применяется при интеграции с устаревшими корпоративными системами.

Управление пользователями

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

Социальная и федеративная аутентификация

Встроенная поддержка брокеров идентификации позволяет пользователям входить через сторонние провайдеры, такие как Google, Facebook (продукт Meta, признанной экстремистской и запрещённой в РФ), GitHub или корпоративные Active Directory. При этом Keycloak может как полностью делегировать аутентификацию внешнему сервису, так и связывать внешнюю учетную запись с локальным профилем, сохраняя возможность управления доступом внутри системы.

Адаптеры и библиотеки

Для интеграции с приложениями разработаны официальные адаптеры для популярных языков и фреймворков: Java (Spring Boot, Quarkus), JavaScript, Python, .NET, Node.js. Адаптеры упрощают проверку токенов доступа и защиту маршрутов, однако современная документация рекомендует использовать стандартные клиентские библиотеки OpenID Connect вместо узкоспециализированных адаптеров, которые постепенно выводятся из поддержки.

Архитектура и устройство

Серверная часть

Keycloak работает как автономное Java-приложение, развертываемое на сервере приложений. Начиная с версии 17, основной дистрибутив построен на базе фреймворка Quarkus, что улучшило производительность и упростило настройку. Сервер хранит данные о пользователях, клиентах, ролях и сессиях в реляционной базе данных. По умолчанию используется встроенная база H2, однако для production-окружений поддерживаются PostgreSQL, MySQL, Oracle Database и Microsoft SQL Server.

Модель клиентов и ролей

В терминологии Keycloak клиентом называется приложение или сервис, запрашивающий аутентификацию. Для каждого клиента настраиваются типы доступа (конфиденциальный или публичный), допустимые redirect-URI и протоколы. Роли могут быть определены как на уровне клиента, так и на уровне области (realm). Область представляет собой изолированное пространство, объединяющее пользователей, клиентов и настройки безопасности. Один сервер Keycloak может обслуживать множество независимых областей.

Токены доступа

При успешной аутентификации Keycloak выдает JSON Web Token (JWT), содержащий сведения о пользователе, его ролях и атрибутах. Приложения проверяют подпись токена, используя открытый ключ сервера, получаемый через endpoint JWKS. Это позволяет приложениям не обращаться к серверу при каждом запросе, что снижает нагрузку и повышает отказоустойчивость.

Сценарии развертывания

Кластерное развертывание

Для обеспечения высокой доступности Keycloak может быть развернут в кластере из нескольких узлов. В этом случае требуется внешняя база данных и настройка распределенного кэша (Infinispan) для синхронизации сессий между узлами. Официальная документация описывает развертывание в Kubernetes с использованием Helm-чартов и операторов.

Облачные и локальные среды

Продукт одинаково применим как в локальных центрах обработки данных, так и в публичных облаках. Возможна установка через контейнеры Docker, что упрощает автоматизацию и масштабирование. Keycloak не предоставляет управляемого облачного сервиса, однако аналогичная функциональность доступна в коммерческом продукте Red Hat build of Keycloak, который входит в состав подписки Red Hat.

Безопасность и соответствие требованиям

Keycloak поддерживает двухфакторную аутентификацию через одноразовые пароли (TOTP), аппаратные ключи WebAuthn и одноразовые коды, отправляемые по электронной почте. Администратор может настроить политики сессий, включая таймауты бездействия и ограничение одновременных входов. Система позволяет вести журнал событий аутентификации и административных действий, что необходимо для аудита и расследования инцидентов.

Для государственных и корпоративных заказчиков важна возможность интеграции с российскими криптопровайдерами и электронной подписью. Поскольку Keycloak является открытым продуктом, его можно дорабатывать под требования законодательства, однако стандартная поставка не включает специфические модули для работы с ГОСТ-алгоритмами, что требует дополнительной разработки.

Лицензирование и поддержка

Исходный код Keycloak доступен на GitHub, и любой желающий может вносить изменения и использовать продукт бесплатно. Коммерческую поддержку и гарантии предоставляет Red Hat через подписку на Red Hat build of Keycloak. В России продукт используется в ряде крупных организаций, однако официальных данных о сертификации ФСТЭК или ФСБ России для стандартной версии не публиковалось.

Сравнение с альтернативами

На рынке IAM-решений Keycloak конкурирует с такими продуктами, как Microsoft Entra ID (ранее Azure Active Directory), Okta, Auth0 и отечественной системой Keycloak-подобного класса «IDM» от компании «КриптоПро». В отличие от проприетарных облачных сервисов, Keycloak не требует оплаты подписки за каждого пользователя и дает полный контроль над данными, что делает его привлекательным для организаций с жесткими требованиями к конфиденциальности. Однако отсутствие встроенного модуля для работы с российскими стандартами криптографии ограничивает его применение в системах, подлежащих аттестации по требованиям безопасности информации.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →