mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3
428 слов
2 минут
Установка и настройка Keycloak
2025-08-02
Загрузка статистики...

Что такое Keycloak#

Keycloak — это open-source решение для управления идентификацией и доступом (IAM) с поддержкой SSO (Single Sign-On), OAuth2, OpenID Connect, SAML 2.0 и других стандартов. Оно часто используется DevOps- и enterprise-средой (де-факто стандарт в крупном энтерпрайзе) для централизованной аутентификации и авторизации пользователей в приложениях.

Если вам понравилась настоящая статья, то можете поддержать автора став спонсором на бусти (ссылка в разделе контакты).#

Зачем нужен Keycloak#

Keycloak позволяет централизованно управлять аутентификацией пользователей:

  • Единый вход (SSO) для всех приложений
  • Поддержка внешних провайдеров (Google, GitHub и др.)
  • Подключение LDAP и Active Directory
  • Удобная админка
  • OpenID Connect и OAuth 2.0

Что понадобится#

  • Docker + Docker Compose
  • Обратный прокси (Traefik)
  • Домен с настройкой DNS (auth.example.ru)
  • SSL-сертификат (через Let’s Encrypt)

Возможности Keycloak#

Аутентификация и авторизация#

  • Single Sign-On (SSO) — единый вход во все подключенные приложения.

  • Поддержка социальных логинов — Google, Facebook, GitHub и др.

  • Поддержка стандартов — OAuth2, OpenID Connect, SAML 2.0.

  • Поддержка MFA (многофакторная аутентификация) — TOTP (Google Authenticator и аналоги).

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

  • Создание и управление пользователями, группами и ролями.

  • Делегированное администрирование (разграничение доступа между администраторами).

  • Импорт и экспорт пользователей (LDAP, CSV, REST API).

Интеграция с корпоративной инфраструктурой#

  • Интеграция с LDAP / Active Directory.

  • SCIM-подобные возможности через REST API.

  • Поддержка клиента CLI и Admin REST API.

Multi-tenancy и реалмы#

  • Поддержка множественных реалмов (изолированных доменов аутентификации).

  • Каждый реалм имеет свои настройки, пользователей, клиентов и политик.

Кастомизация#

  • Кастомизация UI экранов входа и регистрации.

  • Расширяемость через Java SPI/плагины.

  • Локализация интерфейса.

Аудит и безопасность#

  • Аудит логов входа и действий.

  • Настраиваемые политики паролей.

  • Поддержка ограничений IP, блокировка по IP, brute-force защита.

Docker compose файл, который используется в ролике#

services:
postgres:
image: postgres:16-alpine
container_name: keycloak-db
restart: always
expose:
- 5432
volumes:
- /home/path/to/keycloak/database:/var/lib/postgresql/data
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
healthcheck:
test:
[
"CMD",
"pg_isready",
"-q",
"-d",
"${POSTGRES_DB}",
"-U",
"${POSTGRES_USER}",
]
interval: 10s
timeout: 5s
retries: 3
start_period: 60s
networks:
- keycloak
keycloak:
image: quay.io/keycloak/keycloak
container_name: keycloak
command: start
environment:
KC_HOSTNAME: ${KEYCLOAK_HOSTNAME}
KC_BOOTSTRAP_ADMIN_USERNAME: ${KC_BOOTSTRAP_ADMIN_USERNAME}
KC_BOOTSTRAP_ADMIN_PASSWORD: ${KC_BOOTSTRAP_ADMIN_PASSWORD}
KC_DB: postgres
KC_DB_URL: jdbc:postgresql://postgres/${POSTGRES_DB}
KC_DB_USERNAME: ${POSTGRES_USER}
KC_DB_PASSWORD: ${POSTGRES_PASSWORD}
KC_PROXY_HEADERS: "xforwarded"
KC_HTTP_ENABLED: true
KC_HEALTH_ENABLED: true
PROXY_ADDRESS_FORWARDING: "true"
healthcheck:
test:
- "CMD-SHELL"
- |
exec 3<>/dev/tcp/localhost/9000 &&
echo -e 'GET /health/ready HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n' >&3 &&
cat <&3 | tee /tmp/healthcheck.log | grep -q '200 OK'
interval: 10s
timeout: 5s
retries: 3
start_period: 90s
#ports:
# - 8080:8080
#expose:
# - 8080 # web ui http
# - 9000 # health endpoint
restart: always
depends_on:
postgres:
condition: service_healthy
networks:
- keycloak
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.keycloak.entrypoints=http"
- "traefik.http.routers.keycloak.rule=Host(`keycloak.domain.ru`)"
- "traefik.http.middlewares.keycloak-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.keycloak.middlewares=keycloak-https-redirect"
- "traefik.http.routers.keycloak-secure.entrypoints=https"
- "traefik.http.routers.keycloak-secure.rule=Host(`keycloak.domain.ru`)"
- "traefik.http.routers.keycloak-secure.tls=true"
- "traefik.http.routers.keycloak-secure.service=keycloak"
- "traefik.http.services.keycloak.loadbalancer.server.port=8080"
- "traefik.docker.network=proxy"
networks:
keycloak:
internal: true
proxy:
external: true

Значения в файле переменных

# define FQDN hostname
KEYCLOAK_HOSTNAME=keycloak.stilicho.ru
# define login credentials
KC_BOOTSTRAP_ADMIN_USERNAME=admin
KC_BOOTSTRAP_ADMIN_PASSWORD=password
# define database credentials
POSTGRES_DB=keycloak_db
POSTGRES_USER=keycloak_db_user
POSTGRES_PASSWORD=keycloak_db_user_password

Ссылки#

Установка и настройка Keycloak
https://prohomelab.com/posts/single-sign-on/keycloak/
Автор
Stilicho
Опубликовано
2025-08-02
Лицензия
CC BY-NC-SA 4.0

Некоторая информация может быть устаревшей