Facepalm: очередной проект с самописной аутентификацией. Каждый из пяти микросервисов тащит свою базу хэшей паролей. OAuth завёрнут в костыли на PHP и Node.js. Мы видим это сплошь и рядом в legacy-системах. Такая архитектура плодит N+1 таблицу сессий, уязвимости в JWT (нет ротации ключей) и отсутствие единого входа между сервисами. Средняя экономия на лицензиях при миграции с Auth0 или Okta составляет 60–80%.
Keycloak — open-source Identity and Access Management от Red Hat. Self-hosted аналог Auth0 и Okta, поддерживает OpenID Connect, OAuth 2.0, SAML 2.0. Мы используем Keycloak в продакшене более 5 лет, развернули 15+ промышленных кластеров. Аутентификация работает без сбоев даже при 10 000 RPS. Свяжитесь с нами — бесплатно проанализируем вашу IAM-инфраструктуру.
Почему Keycloak лучше самописной аутентификации?
В самописных решениях типичные проблемы: N+1 таблица сессий, уязвимости в JWT (отсутствие ротации), отсутствие SSO между сервисами. Keycloak решает их из коробки:
- Единый реестр пользователей — не дублируем данные в каждом приложении
- Автоматическая ротация ключей подписи JWT — снижаем риск компрометации
- Поддержка LDAP/AD — сотрудники входят с корпоративными логинами
- Брокер социальных сетей — OAuth для Google/GitHub без лишнего кода
Кроме того, Keycloak предоставляет готовый UI аутентификации: страницы логина, саморегистрация, сброс пароля, MFA. Всё настраивается через админку. Разработчик концентрируется на бизнес-логике, а не на написании кучи middleware.
Сравнение Keycloak и самописной реализации
| Критерий | Keycloak | Самописное решение |
|---|---|---|
| Разработка | Часы на настройку | Недели или месяцы кода |
| Безопасность | Сертифицировано, OWASP top-10 | Риск ошибок |
| Масштабирование | Горизонтальное, кластер | Требует доработок |
| Поддержка протоколов | OIDC, OAuth2, SAML из коробки | Только базовый OAuth2 |
Как настроить LDAP-интеграцию?
В Keycloak Admin Console:
- User Federation → Add provider → LDAP
- Указать Connection URL, Bind DN, Users DN
- Настроить маппинг атрибутов: CN → username, mail → email
После настройки сотрудники входят с корпоративными логинами напрямую через Keycloak. Это особенно важно для компаний с Active Directory. Процесс занимает 1–2 дня и не требует изменений в приложениях.
Развёртывание Keycloak: Docker и настройка
Рекомендуем использовать Docker Compose для поднятия Keycloak с PostgreSQL:
version: '3.8' services: keycloak: image: quay.io/keycloak/keycloak:latest environment: - KEYCLOAK_ADMIN=admin - KEYCLOAK_ADMIN_PASSWORD=admin - KC_DB=postgres - KC_DB_URL=jdbc:postgresql://postgres:5432/keycloak - KC_DB_USERNAME=keycloak - KC_DB_PASSWORD=password ports: - '8080:8080' depends_on: - postgres postgres: image: postgres:15 environment: - POSTGRES_DB=keycloak - POSTGRES_USER=keycloak - POSTGRES_PASSWORD=password После запуска переходим в админку, создаём realm и клиента.
Настройка Realm и Client
- Создать Realm (логически изолированная область аутентификации)
- Создать Client для веб-приложения:
- Client type: OpenID Connect
- Client authentication: On (confidential)
- Valid redirect URIs:
https://yourdomain.com/auth/callback - Valid post logout redirect URIs:
https://yourdomain.com
- Сохранить Client ID и Client Secret (Credentials tab)
Интеграция с Laravel через Socialite
// config/services.php 'keycloak' => [ 'client_id' => env('KEYCLOAK_CLIENT_ID'), 'client_secret' => env('KEYCLOAK_CLIENT_SECRET'), 'redirect' => env('KEYCLOAK_REDIRECT_URI'), 'base_url' => env('KEYCLOAK_BASE_URL'), // e.g. http://localhost:8080 'realm' => env('KEYCLOAK_REALM'), ], // Socialite driver use Socialite; $user = Socialite::driver('keycloak')->user(); Прямая верификация JWT (для API)
Keycloak публикует JWKS по стандартному URL. API может проверять JWT напрямую без обращения к Keycloak:
use Firebase\JWT\JWK; use Firebase\JWT\JWT; $jwks = json_decode(file_get_contents('https://keycloak/auth/realms/{realm}/protocol/openid-connect/certs'), true); $keys = JWK::parseKeySet($jwks); $decoded = JWT::decode($token, $keys, ['RS256']); Logout
Keycloak поддерживает front-channel и back-channel logout (RP-Initiated Logout):
$redirectUri = 'https://yourdomain.com'; $logoutUrl = 'https://keycloak/auth/realms/{realm}/protocol/openid-connect/logout?' . http_build_query([ 'id_token_hint' => $idToken, 'post_logout_redirect_uri' => $redirectUri ]); return redirect($logoutUrl); Сроки и стоимость
Кейс: интернет-магазин с SSO и LDAP
Проект: 3 фронта, 2 API, legacy AD. Результат:
- Унифицировали вход для 5000 сотрудников через AD
- Время аутентификации сократили на 40%
- Снизили затраты на лицензии Auth0 до нуля
| Этап | Что делаем | Время |
|---|---|---|
| Развёртывание Keycloak | Docker + PostgreSQL, настройка SSL | 1 день |
| Realm и клиенты | Создание realm, client, ролей, пользователей | 0.5 дня |
| Интеграция с Laravel | Socialite, callback, сессии | 1.5 дня |
| JWT middleware | Проверка токенов, выдача refresh | 1 день |
| LDAP/AD (опционально) | Настройка user federation, синхронизация | 1–2 дня |
| Тестирование | Unit, интеграционные, нагрузочные | 1 день |
Итого: 5–7 рабочих дней. Стоимость рассчитывается индивидуально — зависит от сложности и дополнительных требований. Закажите консультацию — мы бесплатно оценим ваш проект и пришлём коммерческое предложение.
Что входит в результат
- Рабочая инфраструктура Keycloak (Docker Compose, SSL, бэкапы)
- Realm с настроенными клиентами и ролями
- Интеграция с Laravel через Socialite (или любой фреймворк)
- JWT middleware для API
- LDAP/AD синхронизация (по запросу)
- Документация: схема потоков, описание настроек, скрипты деплоя
- Видеозапись обучения вашей команды (1 час)
- Поддержка 1 месяц (Telegram/почта)
Более 5 лет работаем с Keycloak, 15+ успешных интеграций. Сертифицированные специалисты Red Hat. Гарантируем: развернём Keycloak без простоев, настроим под ваш compliance, обучим команду. Свяжитесь с нами для оценки вашего проекта — мы бесплатно проанализируем вашу инфраструктуру и предложим оптимальное решение.







