Keycloak
Open-source сервер аутентификации и управления доступом: единый вход, OAuth 2.0, OpenID Connect и SAML для ваших приложений.
Что такое Keycloak
Keycloak (по-русски пишут «кейклок» или «кейклоак») — сервер аутентификации и управления доступом с открытым кодом. Его ставят перед своими приложениями, чтобы не писать в каждом из них регистрацию, логин, сброс пароля и права.
Схема простая: приложение не хранит пароли и не проверяет их само, а перенаправляет пользователя на Keycloak. Тот проверяет учётные данные и возвращает токен, по которому приложение понимает, кто пришёл и что ему можно. Так реализуется SSO — залогинился один раз, зашёл во все сервисы компании.
Проект создан в Red Hat, написан на Java и передан в CNCF. Это самый популярный self-hosted ответ на вопрос «что поставить вместо Auth0 и Okta».
Что он умеет
- Протоколы: OpenID Connect, OAuth 2.0, SAML 2.0 — то есть подключается почти к чему угодно.
- Identity brokering — вход через Google, GitHub, «Яндекс» и другие внешние провайдеры без своей интеграции в каждом приложении.
- User federation — пользователи могут жить не в Keycloak, а в LDAP или Active Directory; Keycloak работает поверх них.
- Двухфакторная аутентификация — OTP-приложения, WebAuthn и аппаратные ключи.
- Роли и группы — модель прав в духе RBAC, которую приложение получает прямо в токене.
- Admin REST API и темы — всё настраиваемое из UI настраивается и программно, а страницы логина перекрашиваются под свой бренд.
Ключевые понятия
| Понятие | Что это |
|---|---|
| Realm | изолированное пространство: свои пользователи, свои настройки, свои ключи |
| Client | приложение, которое доверяет Keycloak аутентификацию |
| Roles | права, попадающие в токен (realm-роли и client-роли) |
| Groups | набор пользователей, которому назначают роли пачкой |
| Identity provider | внешний источник входа |
| User federation | внешнее хранилище пользователей (LDAP/AD) |
Realm — самое важное. Один Keycloak спокойно обслуживает несколько независимых realm, и это штатный способ сделать мультитенантность: у клиента A свои пользователи, у клиента B — свои, границы жёсткие.
Как поднять
docker run -p 8080:8080 \
-e KC_BOOTSTRAP_ADMIN_USERNAME=admin \
-e KC_BOOTSTRAP_ADMIN_PASSWORD=admin \
quay.io/keycloak/keycloak:latest start-dev
Это dev-режим: встроенная база, HTTP без шифрования, никакой проверки hostname. Для ознакомления годится, в продакшене — нет.
Продакшен-запуск отличается тремя вещами:
- команда
startвместоstart-dev; - внешняя база — PostgreSQL или MySQL/MariaDB. Встроенная H2 живёт в контейнере и умирает вместе с ним;
- явный
KC_HOSTNAMEи TLS. Обычно Keycloak прячут за Nginx или Traefik, которые терминируют HTTPS с SSL-сертификатом; тогда Keycloak запускают сKC_PROXY_HEADERS=xforwarded.
Типовая ошибка новичка — забыть про заголовки от прокси: Keycloak начинает строить редиректы на внутренний адрес, и вход ломается на ровном месте.
Что нужно от сервера
Keycloak — JVM-приложение, и это определяет профиль потребления. Он не нагружает диск и почти не грузит CPU в покое, но требует памяти: для небольшой установки ориентируйтесь на 2 ГБ RAM под контейнер плюс отдельную базу. CPU нужен всплесками — на хеширование паролей при входе.
Отказоустойчивость строят так: несколько узлов Keycloak за балансировщиком, общая база, кластер Infinispan для кеша сессий. В Kubernetes для этого есть отдельный оператор.
Помните: Keycloak становится единой точкой отказа. Он лёг — не логинится никто и никуда. Резервируйте его раньше, чем сами приложения, и не забывайте про бэкап базы.
С чем сравнивают
Из self-hosted-альтернатив: Authentik и Zitadel (обычно проще в освоении), Ory Hydra (минималистичное ядро, всё вокруг — сами). Из облачных — Auth0 и Okta: быстрее стартовать, но пользователи и логи логинов уезжают внешнему провайдеру, и ценник растёт вместе с числом пользователей.
Keycloak выбирают, когда важны контроль над данными, интеграция с корпоративным AD и отсутствие платы за каждого пользователя.
Связанные термины
- SSO — сквозной вход, ради которого чаще всего ставят Keycloak
- OAuth — протокол, на котором построен OpenID Connect
- JWT и токены — формат, в котором Keycloak выдаёт результат
- IAM / IdP — класс систем, к которому относится Keycloak
- RBAC и ACL — модель прав в realm
- PostgreSQL — база для продакшен-установки
Готовы запустить GPU-задачу?
Запустить GPU-сервер