Keycloak SSO для корпоративных сервисов: один логин на всё — от GitLab до 1С
Привет! Меня зовут Семёнов Евгений Сергеевич, и я руковожу компанией АйТи Фреш. Недавно, а точнее в ноябре 2025 года, мы работали с одной юридической фирмой, где трудилось 45 человек. Можете себе представить эту картину? Каждый сотрудник жонглировал в уме от 8 до 12 паролей! Почта, Bitrix24, GitLab, Nextcloud, Grafana, ONLYOFFICE, корпоративный портал, VPN, мобильный Outlook — и это далеко не полный список. Самое забавное, ну или грустное, если подумать: половина из этих паролей были одинаковыми, типа "Maria2020!" везде и всюду. Ещё три лежали на листиках прямо под клавиатурой. А два пароля вообще выдавались каждое утро айтишниками! Знакомо? Но когда мы интегрируем Keycloak, им нужен всего ОДИН-ЕДИНСТВЕННЫЙ пароль для доступа ко всему. Плюс к этому, мы подключаем двухфакторную аутентификацию (2FA) и создаём одну-единственную точку для быстрого отключения уволенного сотрудника. Понимаете, насколько это удобно? А теперь давайте разберёмся, как эта магия работает и во сколько она вам обойдётся.
Что такое Single Sign-On на практике
Ну так что же такое SSO? Это просто невероятно удобная штука, поверьте! Представьте: ваш сотрудник приходит утром, один-единственный раз вводит пароль в Keycloak, и всё. Дальше все внутренние системы — Nextcloud, GitLab, Grafana и прочие — узнают его через специальный браузерный токен. Больше никаких повторных входов. Он кликает на 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 — это буквально спасение. Подумайте сами: он словно такой крепкий мост! Keycloak запросто забирает всех пользователей из вашей Windows AD, а потом выдаёт им токены, чтобы они могли работать с веб-сервисами абсолютно на любой платформе, без проблем.
Установка 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"]
Чтобы обеспечить HTTPS через Let's Encrypt, мы устанавливаем nginx перед Keycloak. Это наш стандартный подход к безопасности.
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 сразу же начинает "видеть" всех ваших пользователей из Active Directory. Настройку групп, кстати, делаем отдельно — это важно.
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.
Подключение приложений
Для каждого сервиса, который вы хотите подключить, мы создаём отдельный Client, то есть, приложение, прямо внутри Keycloak.
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 минут ЕЖЕНЕДЕЛЬНО только на то, чтобы подключить или отключить нового сотрудника. Это же целая проблема!
Что сделали за 9 рабочих дней:
- Обычно для таких задач мы разворачиваем это на VPS с 4 vCPU, 8 ГБ оперативной памяти и 50 ГБ хранилища в Selectel. Используем Keycloak версии 25 через docker-compose и, конечно, Let's Encrypt SSL для безопасности.
- Настраиваем LDAP-синхронизацию с Windows AD: в данном кейсе это было 64 пользователя и 12 групп. Синхронизация происходит каждые 15 минут, чтобы данные всегда были актуальными.
- Мы подключили 9 различных сервисов, используя SAML/OIDC. На каждый из них уходило примерно от 40 до 90 минут.
- Настроили маппинг ролей: группа
corp-it→ admin в Grafana/GitLab/Proxmox;corp-design→ full в Nextcloud и ONLYOFFICE; остальные — viewer. - Для всех пользователей мы включили обязательное TOTP, а для нашей IT-команды, как полагается, добавили ещё и YubiKey. Безопасность превыше всего!
- Как обеспечить сохранность критически важных данных? Мы настроили надёжный бэкап для Keycloak. Теперь каждые 6 часов система автоматически выполняет дамп базы PostgreSQL с помощью pg_dump, параллельно экспортируя realm. Все эти данные мы аккуратно складываем на MinIO S3, чтобы вы могли быть спокойны.
- Безопасность — это не только технологии, но и осведомленность пользователей. Мы провели двухчасовое обучение для сотрудников: подробно объяснили, как настроить Google Authenticator. И, конечно, разобрали, что предпринять, если вдруг потерялся телефон, чтобы доступ оставался защищенным.
И знаете, что в итоге? Результаты, честно говоря, просто поражают воображение! Подключение нового сотрудника теперь занимает всего 3 минуты. Это же вместо прежних сорока! А вот отключение — вообще мгновенное дело, всего 30 секунд, хотя раньше на это уходило 10-15 минут. Количество жалоб на забытые пароли? Сократилось в 8-10 раз! Можете поверить? Весь проект обошёлся клиенту в 148 тысяч рублей, но он окупился всего за четыре месяца, просто за счёт экономии времени их администраторов. Впечатляет, правда?
Бэкапы и восстановление
- pg_dump PostgreSQL каждые 4 часа.
- Для чего нужен JSON? Мы настроили экспорт Keycloak realm в этот формат каждые шесть часов. Это ключ к молниеносному восстановлению структуры, если вдруг что-то пойдёт не так. Фактически, это ваша быстрая страховка.
- Важная деталь нашей работы с конфигурацией: копии docker-compose.yml и файла .env мы храним в Git. Но будьте уверены: из .env всегда удалены все пароли. Мы тщательно следим за безопасностью чувствительных данных.
- Настроить бэкап — это одно, а быть уверенным, что он действительно сработает в нужный момент — совсем другое. Именно поэтому каждые два месяца мы проводим тестовое восстановление на staging-сервере. Это не просто формальность, это реальная проверка работоспособности наших резервных копий.
Развернём 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 тыс руб разово. Включает настройку ролей, групп, резервное копирование и восстановление.
