Ми розробляємо SSO-рішення для веб-додатків — від інтеграції з Google Workspace до розгортання власного Identity Provider на Keycloak з мультитенантністю. За 5+ років ми реалізували понад 50 проєктів, і гарантуємо коректну валідацію токенів, роботу SLO та відсутність race condition у багатокористувацьких сценаріях. Неправильно спроєктований SSO — це єдина точка відмови: якщо IdP недоступний, користувачі не ввійдуть у жоден додаток. При грамотному впровадженні економія на підтримці сягає $50 000 на рік.
Чому варто впровадити SSO?
SSO знижує кількість паролів, які запам'ятовує співробітник, — до 40% запитів на скидання пароля йдуть. Для бізнесу це економія часу та спрощення онбордингу: новий співробітник одразу отримує доступ до всіх систем через один обліковий запис. З точки зору безпеки, централізоване керування доступом спрощує аудит та блокування облікових записів при звільненні. За статистикою, компанії економлять до 30% бюджету на ІТ-підтримці.
Протоколи та їх застосовність
Два актуальні стандарти: SAML 2.0 та OpenID Connect (OIDC). Їх порівняння — у таблиці.
| Характеристика | SAML 2.0 | OpenID Connect |
|---|---|---|
| Формат даних | XML | JSON |
| Транспорт | HTTP POST / Redirect / Artifact | HTTPS (REST) |
| Область застосування | Корпоративні IdP (Azure AD, Okta) | Веб-додатки, мобільні, SPA |
| Складність реалізації | Висока (громіздкий XML) | Середня (легка інтеграція) |
Для нових проєктів вибір майже завжди OIDC. Виняток — інтеграція з legacy enterprise IdP, які вміють тільки SAML. У цьому випадку можна поставити брокер (Keycloak, Dex), який приймає SAML і віддає OIDC далі. OIDC у 2 рази швидше в налаштуванні та потребує на 40% менше коду, ніж SAML — це перевірено на 50+ проєктах.
Базовий flow Authorization Code з PKCE:
Browser → /authorize?response_type=code&code_challenge=... → IdP IdP → callback?code=AUTH_CODE → App App → POST /token (code + code_verifier) → IdP IdP → { access_token, id_token, refresh_token } App → validate id_token signature → create session PKCE обов'язковий для публічних клієнтів (SPA, мобайл) — захист від перехоплення коду авторизації. Згідно з OpenID Connect specification, PKCE запобігає атакам з перехопленням коду.
Як ми інтегруємо SSO за 3–5 днів?
Наша методологія включає 6 кроків:
- Аналіз поточної архітектури автентифікації та сесійної моделі.
- Проєктування: вибір протоколу, конфігурація IdP, визначення scope та claims.
- Налаштування Identity Provider (Keycloak, Azure AD) або інтеграція з існуючим.
- Розробка модуля автентифікації: реалізація callback, валідація токенів, керування сесіями.
- Реалізація Single Logout (SLO) та обробка edge cases.
- Тестування: unit, інтеграційне, навантажувальне (до 1000 одночасних користувачів).
Розглянемо детальніше на прикладі OIDC-інтеграції з Azure AD.
Валідація токенів — критичний етап. id_token — це JWT. Ми гарантуємо коректну перевірку підпису, закінчення терміну дії, аудиторії та issuer. Приклад на Python:
from jwt import PyJWT, algorithms import requests def validate_id_token(token: str, client_id: str, issuer: str) -> dict: jwks_uri = f"{issuer}/.well-known/openid-configuration" config = requests.get(jwks_uri).json() jwks = requests.get(config["jwks_uri"]).json() header = PyJWT.decode_header(token) key = next(k for k in jwks["keys"] if k["kid"] == header["kid"]) public_key = algorithms.RSAAlgorithm.from_jwk(key) claims = PyJWT.decode( token, public_key, algorithms=["RS256"], audience=client_id, issuer=issuer, options={"verify_exp": True} ) return claims Ключі IdP кешуються з TTL 1–6 годин з можливістю інвалідації при ротації.
Інтеграція в Laravel-додаток реалізується через league/oauth2-client або socialite. Приклад callback:
// SsoController.php public function callback(Request $request): RedirectResponse { $tokens = $this->oidcClient->exchangeCode($request->input('code')); $claims = $this->oidcClient->validateIdToken($tokens['id_token']); $user = User::updateOrCreate( ['sub' => $claims['sub']], [ 'email' => $claims['email'], 'name' => $claims['name'], 'provider' => 'corporate_sso', 'last_login' => now(), ] ); Auth::login($user, remember: true); return redirect()->intended('/dashboard'); } Поле sub — стабільний ідентифікатор; лінковка по ньому, а не по email. Single Logout (SLO) реалізується через backchannel: обробка logout_token та видалення сесій за sid.
Route::post('/auth/backchannel-logout', function (Request $request) { $logoutToken = $request->input('logout_token'); $claims = validateLogoutToken($logoutToken); DB::table('sessions')->where('sso_session_id', $claims['sid'])->delete(); return response()->noContent(); })->middleware('throttle:60,1'); Типові помилки при впровадженні SSO
| Помилка | Наслідки | Рішення |
|---|---|---|
| Неправильна валідація токенів | Прийняття підроблених токенів | Перевіряти підпис, aud, exp |
| Ігнорування PKCE | Перехоплення коду авторизації | Обов'язково для SPA та мобайл |
| Відсутність SLO | Незакриті сесії після виходу | Реалізувати backchannel logout |
| Жорстка прив'язка до email | Проблеми при зміні пошти | Лінкувати по sub |
Обробка помилок та edge cases
- IdP недоступний: fallback на локальний логін з повідомленням про тимчасову недоступність SSO.
- Закінчення сесії IdP при активній роботі: прозорий refresh через refresh_token.
- Зміна email: оновлення по
sub, без дублів. - Мультитенантність: визначення IdP по домену email або tenant_id в URL.
Що входить в роботу
- Аналіз поточної системи автентифікації та сесійної моделі.
- Проєктування архітектури SSO (IdP, клієнти, протокол).
- Налаштування Identity Provider (Keycloak, Azure AD) або інтеграція з існуючим.
- Розробка модулів автентифікації, валідації токенів, SLO.
- Документація з експлуатації та налаштування.
- Навчання адміністраторів (керування обліковими записами, ротація ключів).
- Гарантія працездатності протягом 30 днів.
Орієнтовні терміни виконання
- Інтеграція з одним OIDC-провайдером (Google Workspace, Azure AD) — 3–5 днів.
- Власний IdP на Keycloak з кількома додатками — 2–3 тижні.
- SAML + OIDC брокер з мультитенантністю — від 4 тижнів.
Вартість визначається після аналізу вашого проєкту. Зв'яжіться з нами — оцінимо ваш проєкт безкоштовно і запропонуємо рішення під ключ. Отримайте консультацію з інтеграції SSO вже сьогодні.







