Self-hosted Apps

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-сервер