Бесплатный Keycloak, который стоит миллионы: 5 ловушек самостоятельного внедрения
«Зачем платить, если Keycloak бесплатный?» — сказал тимлид и утопил команду в дебрях Quarkus, Java SPI и сломанных миграций. Честный разбор, почему голый open-source IAM превращается в чёрную дыру.
«Да я за вечер подниму в Docker»: начало трагедии
Каждый второй проект по внедрению SSO в российской компании начинается с одной и той же фразы тимлида или ведущего сисадмина:
> *«Парни, зачем нам платить за какие-то коммерческие шлюзы или звать интеграторов? Keycloak же бесплатный! Сейчас закину в Docker Compose, накачу PostgreSQL — к обеду уже подключим GitLab»*.
Звучит как идеальный план. Лицензия 0 рублей, проект от Red Hat, все стандарты OpenID Connect и SAML на борту, миллионы звёзд на GitHub.
К вечеру Keycloak действительно стартует. На порту :8080 загорается дефолтная консоль администрирования. Админ горд собой, руководство довольно экономией.
А дальше начинается суровая реальность.

Проходит две недели, месяц, полгода — и внезапно выясняется, что «бесплатный» Keycloak сжирает 30% времени самого дорогого сеньор-девопса, пользователи воют от непонятных форм входа, а любое обновление превращается в русскую рулетку с базой данных.
Разберём 5 скрытых ловушек, о которых молчат авторы бодрых туториалов «Keycloak за 15 минут».
---
Ловушка 1. Дебри терминологии: Realms, Scopes, Mappers и Flows
Keycloak разрабатывался не как готовая кнопка «сделай SSO», а как швейцарский нож для корпоративных архитекторов масштаба Enterprise с десятками тысяч микросервисов.
В результате даже для банальной задачи — *«просто пускать людей из Active Directory по их логину и спрашивать TOTP»* — вам придётся стать доктором наук по IAM:
- В чём разница между
Client Scopes,Audience ResolversиProtocol Mappers? - Почему если в токене не прописан
subилиpreferred_username, GitLab наглухо отказывается создавать пользователя? - Что такое
Authentication Flows, и почему при неверном порядке шаговExecution(Required vs Alternative) сотрудник может залогиниться вообще без пароля?
В интерфейсе Keycloak сотни переключателей. Ошибка в одном чекбоксе Full Scope Allowed — и в токены начинает утекать вся внутренняя структура ролей компании, ломая заголовки Nginx по 413 Request Header Fields Too Large.
---
Ловушка 2. Синхронизация с Active Directory: грабли на ровном месте
Кажется: ну что сложного подключить LDAP? Вбил ldap://dc1.company.local, указал bind_dn — и поехали.
В реальной жизни Active Directory в компании на 100–200 человек — это исторический памятник. Там есть уволенные в 2018 году аккаунты, пользователи с пробелами в логинах, фамилии на кириллице и вложенные группы на шесть уровней глубины.
Что происходит с чистым Keycloak:
1. Зависание на вложенных группах (Nested Groups). Если включить синхронизацию групп в лоб, Keycloak может уйти в бесконечную рекурсию или положить CPU контроллера домена сотнями LDAP-запросов в секунду.
2. Битая синхронизация из-за одного юзера. Стоит Keycloak наткнуться на некорректный атрибут sAMAccountName или дубликат mail — процесс периодического синка падает с ошибкой, и новые сотрудники не появляются в системе часами.
3. Kerberos / SPNEGO через VPN. Настроить бесшовный вход в домене — полбеды. Но когда удалёнщик подключается через VPN или телефон, Kerberos отваливается, а дефолтный Keycloak вместо красивого фолбэка выдаёт пользователю пугающую ошибку Invalid credentials.
---
Ловушка 3. Кастомизация интерфейса: добро пожаловать в Java и FreeMarker
Покажите бухгалтеру или сейлзу стандартную форму входа Keycloak.
Английский язык, странные системные сообщения об ошибках вроде Federated Identity Provider Error, невнятный дизайн из нулевых. Пользователи в панике пишут в саппорт: *«Меня взломали, требует какой-то Authenticator Code»*.
Вы решаете: надо русифицировать, повесить логотип компании и сделать понятные подсказки.
И тут выясняется:
- В Keycloak нет визуального редактора тем. Вообще.
- Темы верстаются на древнем шаблонизаторе Apache FreeMarker (
.ftlфайлы). - Чтобы поменять надпись или стилизовать поле ввода, системный администратор должен лезть в контейнер, форкать дефолтную тему, ковырять CSS и заново пересобирать Docker-образ.
- А если вы захотите красивую пошаговую регистрацию MFA с понятными инструкциями для нетехнических людей — готовьтесь писать кастомный плагин на Java (Java SPI) и компилировать
.jar.
Вместо автоматизации доступов админ превращается в верстальщика на FreeMarker.
---
Ловушка 4. Обновления версий: русская рулетка с PostgreSQL
Keycloak обновляется стремительно — мажорные версии выходят раз в несколько месяцев. И каждое обновление в продакшене — это стресс.
С переходом с WildFly на Quarkus поменялось практически всё:
- Старые переменные окружения объявляются deprecated;
- Конфигурационные файлы переписываются с нуля;
- Миграции схемы базы данных PostgreSQL нередко ломаются на больших таблицах пользовательских сессий (
USER_SESSION); - Ваши кастомные темы и SPI-плагины внезапно перестают компилироваться, потому что в новом релизе Keycloak разработчики изменили внутренние Java-интерфейсы.
В итоге сисадмин решает: *«Работает — не трогай»*.
Keycloak зависает на версии трёхлетней давности, обрастает критическими уязвимостями (CVE), а компания боится к нему прикоснуться.
---
Ловушка 5. Скрытая экономика: сколько на самом деле стоит «бесплатное»
Давайте посчитаем честную экономику самостоятельного внедрения голого Keycloak в компании на 50–200 человек:
| Статья расходов | «Бесплатный» Keycloak своими силами | Готовый шлюз доступа (OwnGate) |
|---|---|---|
| Стоимость лицензии | 0 ₽ | Фиксированная подписка |
| Время на запуск пилота | 3–8 недель экспериментов | 1–2 дня на виртуальной машине |
| Русификация и темы | 40+ часов возни с FreeMarker/CSS | Готовый русский UI для людей из коробки |
| Связка с AD и группы | Ручной подбор мапперов и фильтров | Пошаговый мастер подключения каталога |
| Поддержка и апдейты | 10–20 часов в месяц рабочего времени DevOps | Заботится вендор, обновления в 1 команду |
| Итоговая цена за год | 500 000 – 1 200 000 ₽ в зарплатах инженеров | В разы дешевле зарплаты одного сисадмина |
Бесплатный open-source бесплатен только в том случае, если время ваших специалистов стоит 0 рублей.

---
Когда чистый Keycloak оправдан, а когда нет
Будем честны: Keycloak — великолепный продукт. Мы в OwnGate сами используем проверенное ядро Keycloak под капотом.
Но есть принципиальная разница в сценариях:
Чистый Keycloak нужен, если:
- Вы — огромный банк, ритейлер или телеком с миллионом пользователей;
- У вас есть выделенная команда IAM-инженеров и Java-разработчиков, которая только этим и занимается;
- Вам нужны экзотические сценарии федерации, кастомные протоколы и десятки кастомных провайдеров авторизации.
Готовый шлюз (OwnGate) нужен, если:
- В компании работает от 30 до 250 человек;
- В ИТ-отделе от 1 до 5 специалистов, перегруженных текущими задачами;
- Нужно решить конкретные бизнес-боли: единый вход (SSO) в GitLab/Grafana/Nextcloud, обязательный MFA, закрытие зомби-сессий при увольнении в AD и русскоязычный журнал аудита;
- Вы хотите получить работающий результат сегодня, а не становиться заложником бесконечной настройки конструктора.
---
Резюме
Не путайте инструмент и продукт.
Двигатель внутреннего сгорания — отличная вещь, но чтобы доехать из дома до офиса, вы покупаете готовый автомобиль с рулём, педалями и гарантией, а не вытачиваете коленвал на токарном станке в гараже.
SSO и MFA должны защищать компанию и экономить время инженеров, а не создавать вторую работу для сисадмина.