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 →

