Keycloak SSO для корпоративных сервисов: один — АйТи Фреш
· 11 мин чтения

Keycloak SSO для корпоративных сервисов: один логин на всё — от GitLab до 1С

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), просто принимают их. Всё просто и логично.

Преимущества для бизнеса:

Keycloak vs альтернативы

ПродуктСильные стороныДля кого
KeycloakEnterprise, SAML/OIDC, UI, LDAP-sync, 2FA, брокерКомпании 30+ сотрудников
AutheliaЛегковесный, идеально для reverse-proxy1-3 сервиса за nginx/Traefik
Okta / Auth0SaaS, удобно, дорогоСтартапы с деньгами
AD FSИнтеграция с AD, Windows-centricWindows-экосистема, МС-партнёры
FreeIPALinux 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 рабочих дней:

  1. Обычно для таких задач мы разворачиваем это на VPS с 4 vCPU, 8 ГБ оперативной памяти и 50 ГБ хранилища в Selectel. Используем Keycloak версии 25 через docker-compose и, конечно, Let's Encrypt SSL для безопасности.
  2. Настраиваем LDAP-синхронизацию с Windows AD: в данном кейсе это было 64 пользователя и 12 групп. Синхронизация происходит каждые 15 минут, чтобы данные всегда были актуальными.
  3. Мы подключили 9 различных сервисов, используя SAML/OIDC. На каждый из них уходило примерно от 40 до 90 минут.
  4. Настроили маппинг ролей: группа corp-it → admin в Grafana/GitLab/Proxmox; corp-design → full в Nextcloud и ONLYOFFICE; остальные — viewer.
  5. Для всех пользователей мы включили обязательное TOTP, а для нашей IT-команды, как полагается, добавили ещё и YubiKey. Безопасность превыше всего!
  6. Как обеспечить сохранность критически важных данных? Мы настроили надёжный бэкап для Keycloak. Теперь каждые 6 часов система автоматически выполняет дамп базы PostgreSQL с помощью pg_dump, параллельно экспортируя realm. Все эти данные мы аккуратно складываем на MinIO S3, чтобы вы могли быть спокойны.
  7. Безопасность — это не только технологии, но и осведомленность пользователей. Мы провели двухчасовое обучение для сотрудников: подробно объяснили, как настроить Google Authenticator. И, конечно, разобрали, что предпринять, если вдруг потерялся телефон, чтобы доступ оставался защищенным.

И знаете, что в итоге? Результаты, честно говоря, просто поражают воображение! Подключение нового сотрудника теперь занимает всего 3 минуты. Это же вместо прежних сорока! А вот отключение — вообще мгновенное дело, всего 30 секунд, хотя раньше на это уходило 10-15 минут. Количество жалоб на забытые пароли? Сократилось в 8-10 раз! Можете поверить? Весь проект обошёлся клиенту в 148 тысяч рублей, но он окупился всего за четыре месяца, просто за счёт экономии времени их администраторов. Впечатляет, правда?

Бэкапы и восстановление

Развернём 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 тыс руб разово. Включает настройку ролей, групп, резервное копирование и восстановление.

Подпишитесь на рассылку ITfresh

Хотите быть в курсе? Раз в неделю мы делимся практическими гайдами специально для руководителей IT-отделов и сисадминов. Мы пишем о безопасности, 1С, миграциях, резервных копиях, а ещё рассказываем о лайфхаках, которые сами нашли в реальных проектах. Присоединяйтесь!

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.