Keycloak SSO для корпоративных сервисов: один логин на всё — от GitLab до 1С
Меня зовут Семёнов Евгений Сергеевич, директор АйТи Фреш. Пришёл в ноябре 2025 к новому клиенту — юрфирма на 45 сотрудников. У каждого сотрудника в голове 8-12 паролей: почта, Bitrix24, GitLab, Nextcloud, Grafana, ONLYOFFICE, корпоративный портал, VPN, мобильный Outlook. Половина паролей совпадает (один и тот же «Maria2020!»), три — записаны на бумажке под клавиатурой, два — выдаёт IT каждое утро. Когда я ставлю им Keycloak — у них остаётся ОДИН пароль на всё. Плюс 2FA. Плюс единая точка отключения при увольнении. Расскажу, как это работает и сколько стоит.
Что такое Single Sign-On на практике
SSO — это когда сотрудник логинится один раз утром в Keycloak, и дальше все внутренние сервисы принимают его через браузерный токен без повторной аутентификации. Зашёл на Nextcloud — сразу внутри. Перешёл на GitLab — уже залогинен. Открыл Grafana — уже.
Технически это SAML 2.0 или OAuth2/OIDC. Keycloak — Identity Provider (IdP), который выдаёт токены. Приложения — Service Providers (SP), которые их принимают.
Преимущества для бизнеса:
- Один пароль. Сотрудник помнит один, admin управляет одним.
- Одно отключение. Увольнение — отключили в Keycloak, пропал доступ везде.
- Централизованная 2FA. Включили TOTP/YubiKey в Keycloak — работает на всех сервисах.
- Аудит. Единый лог входов по всем сервисам.
- Self-service. Пользователь сам сбрасывает пароль через email, не дёргая IT.
Keycloak vs альтернативы
| Продукт | Сильные стороны | Для кого |
|---|---|---|
| Keycloak | Enterprise, SAML/OIDC, UI, LDAP-sync, 2FA, брокер | Компании 30+ сотрудников |
| Authelia | Легковесный, идеально для reverse-proxy | 1-3 сервиса за nginx/Traefik |
| Okta / Auth0 | SaaS, удобно, дорого | Стартапы с деньгами |
| AD FS | Интеграция с AD, Windows-centric | Windows-экосистема, МС-партнёры |
| FreeIPA | Linux identity, Kerberos, SUDO-правила | Linux-ориентированная инфра |
Для среднего бизнеса с смешанной Windows/Linux инфраструктурой — Keycloak. Он работает как мост: читает пользователей из Windows AD, выдаёт токены для web-сервисов на любой платформе.
Установка Keycloak 25
# docker-compose.yml
services:
postgres:
image: postgres:16
environment:
POSTGRES_DB: keycloak
POSTGRES_USER: keycloak
POSTGRES_PASSWORD: ${POSTGRES_PASS}
volumes: ["./pgdata:/var/lib/postgresql/data"]
keycloak:
image: quay.io/keycloak/keycloak:25.0
command: start --optimized
environment:
KC_HOSTNAME: sso.example.ru
KC_HOSTNAME_STRICT: true
KC_HTTP_ENABLED: true
KC_PROXY: edge
KC_DB: postgres
KC_DB_URL: jdbc:postgresql://postgres:5432/keycloak
KC_DB_USERNAME: keycloak
KC_DB_PASSWORD: ${POSTGRES_PASS}
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: ${KC_ADMIN_PASS}
depends_on: [postgres]
ports: ["8080:8080"]
nginx перед Keycloak для HTTPS через Let's Encrypt:
server {
listen 443 ssl http2;
server_name sso.example.ru;
ssl_certificate /etc/letsencrypt/live/sso.example.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/sso.example.ru/privkey.pem;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
}
Интеграция с Active Directory
Создаём realm corp, в нём настраиваем LDAP-provider:
Admin Console → realm corp → User federation → Add provider → ldap
Connection URL: ldaps://dc01.corp.example.ru:636
Enable StartTLS: yes
Use Truststore SPI: Always
Bind DN: CN=Keycloak Service,OU=Services,DC=corp,DC=example,DC=ru
Bind Credential: [secure password]
Users DN: OU=Users,DC=corp,DC=example,DC=ru
Username LDAP attr: sAMAccountName
UUID LDAP attribute: objectGUID
Sync period: 900 (seconds)
Full sync period: -1 (once per day)
После этого Keycloak видит всех пользователей из AD. Маппинг групп — отдельно:
User federation → ldap → Mappers → Create group-ldap-mapper
LDAP Groups DN: OU=Groups,DC=corp,DC=example,DC=ru
Group Object Classes: group
Mode: READ_ONLY
User Groups Retrieve Strategy: LOAD_GROUPS_BY_MEMBER_ATTRIBUTE
Группы AD становятся группами Keycloak. Можно потом раздавать доступ в приложениях по группам: corp-it → admin в GitLab, corp-hr → viewer в Grafana.
Подключение приложений
В Keycloak создаём Client (приложение) для каждого сервиса.
GitLab через SAML
Keycloak: Clients → Create →
Client ID: https://gitlab.example.ru
Protocol: saml
Valid redirect URI: https://gitlab.example.ru/users/auth/saml/callback
Assertion Consumer URL: https://gitlab.example.ru/users/auth/saml/callback
# В gitlab.rb:
gitlab_rails['omniauth_providers'] = [{
name: 'saml',
args: {
assertion_consumer_service_url: 'https://gitlab.example.ru/users/auth/saml/callback',
idp_cert_fingerprint: '52:E8:85:3B:...',
idp_sso_target_url: 'https://sso.example.ru/realms/corp/protocol/saml',
issuer: 'https://gitlab.example.ru',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
}
}]
Nextcloud через OIDC
# Установить app user_oidc
# Config:
Identifier: corp
Discovery: https://sso.example.ru/realms/corp/.well-known/openid-configuration
Client ID: nextcloud
Client secret: (из Keycloak)
Scope: openid email profile
Attribute for user ID: sub
Grafana через OAuth2
# /etc/grafana/grafana.ini
[auth.generic_oauth]
enabled = true
name = Keycloak
client_id = grafana
client_secret = [...]
auth_url = https://sso.example.ru/realms/corp/protocol/openid-connect/auth
token_url = https://sso.example.ru/realms/corp/protocol/openid-connect/token
api_url = https://sso.example.ru/realms/corp/protocol/openid-connect/userinfo
scopes = openid email profile
role_attribute_path = contains(groups[*], 'corp-it') && 'Admin' || 'Viewer'
2FA/MFA
Включаем в realm:
Authentication → Required Actions → Configure OTP (enabled)
Authentication → Flows → Browser → Add OTP Form
После этого при первом логине Keycloak предложит пользователю настроить TOTP через Google Authenticator / Authy. Для админов дополнительно включаем WebAuthn (YubiKey):
Authentication → Flows → Browser → Add WebAuthn Passwordless
Кейс: SSO для проектного института
В феврале 2026 клиент — проектный институт, 64 сотрудника, инфраструктура: GitLab, Nextcloud, ONLYOFFICE, Grafana, Zabbix, Rocket.Chat, Proxmox, корпоративный портал на Wiki.js, amoCRM. Каждый сервис — свой логин. Текучка кадров — 2-3 человека в месяц, админ тратил 40 минут в неделю на onboarding/offboarding.
Что сделали за 9 рабочих дней:
- VPS 4 vCPU / 8 ГБ / 50 ГБ в Selectel, Keycloak 25 через docker-compose, Let's Encrypt SSL.
- LDAP-sync с Windows AD (64 пользователя + 12 групп), period=15 минут.
- Подключили 9 сервисов через SAML/OIDC. По 40-90 минут на каждый.
- Настроили маппинг ролей: группа
corp-it→ admin в Grafana/GitLab/Proxmox;corp-design→ full в Nextcloud и ONLYOFFICE; остальные — viewer. - Включили обязательное TOTP для всех + YubiKey для IT-команды.
- Настроили backup Keycloak: pg_dump PostgreSQL + export realm каждые 6 часов на MinIO S3.
- Двухчасовое обучение сотрудников: как настроить Google Authenticator, что делать если потерял телефон.
Результат: onboarding нового сотрудника — 3 минуты (раньше 40). Offboarding — 30 секунд (раньше 10-15 минут). Жалоб на забытые пароли — стало в 8-10 раз меньше. Стоимость проекта — 148 тыс руб. Окупилось на экономии админского времени за 4 месяца.
Бэкапы и восстановление
- pg_dump PostgreSQL каждые 4 часа.
- Export realm в JSON каждые 6 часов (для быстрого восстановления структуры).
- Копия docker-compose.yml и .env в git (но .env без паролей).
- Тестовое восстановление на staging каждые 2 месяца — проверка реальной работоспособности бэкапов.
Развернём Keycloak SSO для вашей компании — от 130 000 руб.
Я лично проектирую и разворачиваю единую точку аутентификации Keycloak для бизнеса 30-100 сотрудников в Москве и области. Интеграция с Active Directory, подключение всех внутренних сервисов (GitLab, Nextcloud, Grafana, Proxmox, ONLYOFFICE и т.д.), включение 2FA, обучение сотрудников. Типовой проект — 1.5-3 недели. Первичный аудит стека и план внедрения — бесплатно.
Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш
FAQ — Keycloak SSO
- Зачем Keycloak, если уже есть AD с LDAP?
- LDAP умеет только аутентифицировать по паролю. Keycloak — это IdP: выдаёт SAML/OAuth2/OIDC-токены для web-приложений, управляет сессиями, делает SSO (login once, access everywhere), поддерживает 2FA/MFA, социальные логины. Для 5+ внутренних web-сервисов Keycloak экономит часы админа на управление паролями.
- Keycloak или Authelia?
- Keycloak — enterprise-класс, полный SAML/OIDC/OAuth2, UI для администрирования, LDAP-синхронизация, developer-friendly. Authelia — легковеснее, проще, но узко сфокусирован на reverse-proxy auth (Traefik, nginx). Для 5+ web-сервисов с ролевой моделью — Keycloak. Для простой 2FA перед nginx — Authelia.
- Какие приложения поддерживают Keycloak?
- Из коробки через SAML или OIDC: GitLab, Nextcloud, ONLYOFFICE, Grafana, Jenkins, AWX/Ansible Tower, Rocket.Chat, Mattermost, Zabbix, Kibana, Proxmox (через OIDC), любой web-сервис с SAML-плагином. Через адаптеры: 1С (с нашими доработками), FreeIPA, AD.
- Нужна ли 2FA обязательно?
- Для административных учёток — да, всегда. Для обычных — зависит от чувствительности данных. В юрфирмах, медклиниках, финтехе — обязательно. Keycloak поддерживает TOTP (Google Authenticator), WebAuthn (YubiKey), SMS, email-код. Для корпоратива рекомендую TOTP для всех + YubiKey для админов.
- Сколько стоит внедрение SSO под ключ?
- Для офиса 30-80 сотрудников и 5-10 внутренних сервисов: VPS 4 vCPU / 8 ГБ RAM — 4-6 тыс руб/мес, работа по установке Keycloak + LDAP-синк с AD + подключение всех сервисов + 2FA + обучение — от 130 тыс руб разово. Включает настройку ролей, групп, резервное копирование и восстановление.