Многие реальные стэки сочетают SAML Service Provider-ы (старые B2B-инструменты) и OIDC Relying Party (новые приложения). Auth Fly считает оба first-class на одном IdP, делящем одну сессию.
Общая cookie
После успешного входа через Hanko IdP ставит на собственном origin подписанную cookie idp_session. Cookie HttpOnly, Secure, подписана HMAC. Обработчики SAML и OIDC читают одну и ту же cookie.
Путь SAML
GET /ssoразбирает AuthnRequest и ищет SP в allowlist поIssuer.- Если IdP-сессия валидна, пользователь сразу уходит на
/sso/complete. - SAML Response подписывается и постится на ACS из конфига SP — никогда не из запроса.
Путь OIDC
GET /authorizeвалидируетclient_idиredirect_uriточным сравнением по allowlist.- Если IdP-сессия валидна, authorization code выдаётся сразу, и пользователь возвращается с
code. POST /tokenменяет одноразовый code на access token и id_token, подписанный ключом IdP (RS256, доступен через JWKS).
Почему одна cookie
Одну подписанную cookie проще объяснить, проще отозвать и проще аудировать, чем две параллельные сессии. Экран входа рисуется один раз; оба протокола завершаются без второго запроса.