Мы разрабатываем 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 уже сегодня.







