Централизованная аутентификация и SSO на базе Keycloak для корпоративных систем

2 апреля 2026 • Татьяна Волгина
Итог для бизнеса
· 60 корпоративных систем работают через единый вход;
· один логин и пароль вместо десятков учётных записей;
· централизованное управление доступами;
· новым сотрудникам доступ выдается автоматически, уволенным — закрывается;
· единые политики безопасности действуют во всей инфраструктуре.

Крупная сеть ресторанов столкнулась с типичной проблемой растущей IT-инфраструктуры: десятки систем с разными механизмами авторизации, множественные интеграции и отсутствие единого управления доступами. Мы построили централизованную систему аутентификации на базе Keycloak, объединив офисные и ресторанные системы в единую точку входа.

Исходная инфраструктура

В инфраструктуре компании работало около 50–60 систем, каждая со своей историей внедрения, собственным поставщиком и правилами интеграции.

Разнородность систем

Сотрудники делились на два типа: офисные и ресторанные.

Офисные сотрудники находились в Active Directory, и корпоративные системы уже были к нему подключены. В этой части инфраструктура оставалась управляемой. С ресторанными сотрудниками ситуация была иной. Здесь сложилось два подхода, и оба создавали проблемы.

Первый — общие обезличенные учетки из Active Directory. Один логин и пароль на весь ресторан или смену: кассир, администратор и управляющий заходили под одними и теми же данными. Кто именно работал в системе в конкретный момент — неизвестно, полноценный аудит действий в таких условиях невозможен.

Второй — часть систем создавала собственную базу пользователей. Поставщик подключался к ERP (Корпоративная система, в которой HR-отдел ведет учет и управление данными о сотрудниках), забирал нужный ему список сотрудников и хранил их у себя: свои логины, свои пароли, своя логика того, кого считать активным сотрудником, а кого — уволенным. В итоге у каждой такой системы был свой срез сотрудников, и никто не сверял эти списки между собой.

В результате было сложно ответить на базовые вопросы:

  • кто и к каким системам имеет доступ 
  • закрыты ли учетные записи уволенных сотрудников 
  • как именно работает конкретная интеграция 

Эта информация чаще всего находилась только у поставщика системы и нередко была неполной.

Сложность для пользователей и администраторов

Сотрудники, работающие с несколькими системами, были вынуждены запоминать разные логины и пароли.

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

Архитектура решения: аутентификация и SSO на базе Keycloak

В основе решения — Keycloak, open-source платформа для централизованной аутентификации и авторизации.

Ключевая возможность этой системы — единый вход (SSO). Пользователь вводит логин и пароль один раз и получает доступ ко всем подключенным системам без повторной авторизации.

Keycloak поддерживает стандартные протоколы безопасности:

  • OAuth 2.0 
  • OpenID Connect 
  • SAML 

Это позволяет подключать большинство современных систем без разработки отдельной кастомной интеграции для каждой.

Единым источником данных о сотрудниках стала ERP-система. Из нее информация поступает в сервис синхронизации:

  • для ресторанных сотрудников создаются учетные записи в FreeIPA 
  • для офисных сотрудников основным каталогом остается Active Directory, который дополнительно обогащается данными из ERP 

Keycloak подключен к обоим каталогам через механизм федерации и выступает единой точкой входа для всех систем.

Второй фактор аутентификации реализован по-разному для разных категорий сотрудников:

  • офисные сотрудники используют внешний MFA-сервис с push-подтверждением на телефоне 
  • ресторанные сотрудники используют стандартный TOTP через приложение-аутентификатор 

Восстановление пароля происходит через второй фактор, если он настроен. Если MFA не подключен, используется SMS-код.

Схема интеграции Keycloak для единого входа в сети ресторанов.

Особенности интеграции

Инфраструктура

Решение развернуто на трех нодах в разных дата-центрах. Keycloak работает в режиме active-active с общим распределенным кэшем Infinispan. FreeIPA работает в режиме multi-master репликации.

Система продолжает функционировать даже при отказе одного из дата-центров.

Два каталога — две истории

Офисные сотрудники уже существовали в Active Directory. Основная задача заключалась в обогащении каталога дополнительными атрибутами из ERP.

Для ресторанных сотрудников каталог FreeIPA создавался с нуля. Был разработан полноценный pipeline синхронизации, который включает:

  • валидацию данных 
  • нормализацию телефонных номеров 
  • обработку дубликатов 
  • защитные механизмы 
  • детальную статистику по каждому запуску 

Кастомные расширения

Стандартного функционала Keycloak оказалось недостаточно, поэтому были разработаны собственные Java-расширения. Среди них:

  • отправка и проверка SMS-кода при сбросе пароля с поддержкой разных SMS-провайдеров 
  • проверка наличия настроенного MFA-устройства для выбора сценария восстановления доступа 

Также реализован кастомный authentication flow с логикой выбора второго фактора в зависимости от типа сотрудника. Форма входа стилизована под корпоративный интерфейс компании.

Подключение систем

Каждая система регистрируется в Keycloak как отдельный клиент — через OIDC или SAML, в зависимости от возможностей продукта. Для каждой системы проводились консультации по интеграции и настройке.

Работа с коробочными решениями шла глубже: мы изучали документацию конкретного продукта, разбиралась со спецификой его интеграции и при необходимости находили обходные решения или настраивали параметры на стороне Keycloak.

Параллельно с технической настройкой происходило поэтапное переключение систем.

Процесс внедрения и эксплуатация 

Поэтапное переключение систем

Внедрение проходило постепенно. Первыми подключались офисные системы, интегрированные с Active Directory. Сначала был проведен пилот на одном приложении, после чего схема подключения была масштабирована на остальные системы.

Ресторанные системы потребовали отдельного подхода. В первую очередь переключались системы, которые использовали общие ресторанные учетные записи из Active Directory. Для каждой системы был организован постепенный перевод сотрудников на персональные учетные записи — ресторан за рестораном, с обучением и инструкциями.

Такой подход позволил постепенно внедрять второй фактор аутентификации. Одновременный переход примерно 30 тысяч сотрудников на MFA был бы слишком сложным как для поддержки, так и для пользователей.

На уровне Keycloak с помощью дополнительного кастомного расширения была реализована возможность закрывать доступ общих учетных записей к отдельным приложениям.

По мере того, как в системе полностью исчезали общие учетные записи, это становилось индикатором готовности. Значит сотрудники уже используют вход через Keycloak и можно переключать следующий слой систем.

Перед переключением каждой системы отдельно проводилась сверка данных. Для систем, которые напрямую обращались к ERP, анализировались расхождения в данных сотрудников, оценивалась доля пользователей с потенциальными проблемами при переходе и готовились рекомендации по очистке данных с конкретными примерами.

Отказоустойчивость

Перед запуском было проведено комплексное тестирование отказоустойчивости трех кластеров:

  • Keycloak 
  • PostgreSQL 
  • FreeIPA 

Проверялись сценарии отключения отдельных нод, потери связи между дата-центрами и недоступности базы данных. Во всех штатных сценариях система автоматически восстанавливалась примерно за 30 секунд. Пользовательские сессии при этом сохранялись.

Однако тестирование выявило и нестандартный сценарий. При временной потере связи между дата-центрами нода Infinispan после восстановления не всегда корректно возвращалась в кластер и могла считать себя координатором. Это приводило к рассинхронизации кэшей и ошибкам при обработке запросов. Проблема стабильно воспроизводилась, обновление версии Keycloak ее не решало.

В качестве временного решения был написан watchdog-скрипт на Python. Он отслеживает состояние кластера и при необходимости автоматически перезапускает контейнер без участия администратора.

Также проблема была зарегистрирована в репозитории Keycloak. Мы зарепортили эту проблему и команда Keycloak подтвердила наличие бага и включила исправление в roadmap.

Нагрузочное тестирование

Нагрузочные тесты проводились с использованием Yandex Tank. Тестировались сценарии входа пользователей с учетом OTP-аутентификации и обновления токенов.

Тесты запускались:

  • из внутренней сети 
  • из внешней среды через Яндекс Облако 

Проверялась работа отдельных нод напрямую и через балансировщик. В результате удалось получить реалистичную картину производительности и подтвердить готовность системы к ожидаемой нагрузке.

График времени ответов и запросов в Keycloak для ресторанов.

(Пример сбоя в момент нагрузочного тестирования. Оранжевые пики указывают на зависания в ответах и возникновение тайм-аутов через определенное время)

Квантили времени ответов на Keycloak для ресторанов

(Пример успешного прохождения нагрузочного тестирования. После устранения проблем балансировщика время ответа не превышало 60 мс)

Мониторинг

Состояние системы отслеживается через Grafana с использованием VictoriaMetrics и Loki. Настроены отдельные дашборды для компонентов:

  • Keycloak 
  • PostgreSQL 
  • FreeIPA 
  • etcd 

Логи хранятся 90 дней. Настроены алерты на ключевые события: от проблем с репликацией до превышения порога ошибок синхронизации.

Интерфейс управления доступом и аутентификацией на Keycloak.

(Дашборд мониторинга переключенных систем на Keycloak в Grafana.)

Что получили в итоге

Единая точка входа. Все системы подключены к одному механизму аутентификации. Сотрудник входит один раз и получает доступ ко всем необходимым приложениям без повторного ввода учетных данных.

Прозрачность и контроль управления доступами. Появился инструмент управления жизненным циклом учетных записей. Новые сотрудники автоматически получают доступ к системам, а доступ уволенных сотрудников автоматически закрывается. По каждой учетной записи доступна история изменений: когда она создана, обновлена или удалена и по какой причине.

Повышение безопасности. В инфраструктуре появились централизованные политики паролей, второй фактор аутентификации и механизмы защиты от дубликатов учетных записей. Общие обезличенные учетные записи постепенно выводятся из эксплуатации. Им на смену приходят персональные аккаунты с возможностью полноценного аудита действий.

Готовность инфраструктуры к масштабированию. Архитектура прошла тестирование на отказоустойчивость и нагрузку. Подключение новых систем теперь происходит значительно быстрее, поскольку базовая архитектура и процессы уже выстроены.

Если вы решаете похожие задачи — будь то внедрение централизованной аутентификации, интеграция корпоративных систем или развитие внутренней IT-инфраструктуры — мы готовы поделиться опытом и обсудить возможные подходы к решению.

Подробнее о наших услугах здесь - DevOps и инфраструктура

Недавние публикации

Еще по теме

Похожие бизнес-задачи и решения, которые мы нашли, проверили и внедрили