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, навчимо команду. Зв'яжіться з нами для оцінки вашого проєкту — ми безкоштовно проаналізуємо вашу інфраструктуру та запропонуємо оптимальне рішення.







