Мы разрабатываем 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 дней, от $3,000 до $5,000.
- Собственный IdP на Keycloak с несколькими приложениями — 2–3 недели, от $8,000 до $12,000.
- SAML + OIDC брокер с мультитенантностью — от 4 недель, от $12,000 до $18,000.
Основное время уходит на конфигурацию IdP, тестирование edge cases и настройку SLO. Свяжитесь с нами — оценим ваш проект бесплатно и предложим решение под ключ. Получите консультацию по интеграции SSO уже сегодня.







