VersolaVersola/docs
versola.kzGitHub

OpenID Connect Core 1.0

Слой аутентификации поверх OAuth 2.1 — чеклист соответствия OIDC

Спецификация: OpenID Connect Core 1.0

OpenID Connect добавляет слой идентификации поверх OAuth 2.0/2.1. Он вводит ID-токен, UserInfo-эндпоинт и стандартный набор пользовательских claims.

Flow авторизации

  • Authorization Code Flow (response_type=code)
  • Hybrid Flow — частично (response_type=code id_token)
  • Implicit Flow — намеренно не поддерживается (удалён в OAuth 2.1)
  • Hybrid Flow — response_type=code token и code token id_token — намеренно не поддерживается (удалён в OAuth 2.1)

ID-токен

  • ID-токен в формате JWT, подписанный RS256
  • Стандартные claims: iss, sub, aud, exp, iat
  • Claim nonce — дублируется из запроса авторизации
  • Claim auth_time — время аутентификации
  • Claim acr — Authentication Context Class Reference
  • Claim amr — Authentication Method References (RFC 8176)
  • c_hash — хэш кода в Hybrid Flow
  • at_hash — хэш access-токена — не включается в ID-токен
  • Подписанный ответ UserInfo — возвращается при Accept: application/jwt
  • Зашифрованный ID-токен (JWE) — не поддерживается

UserInfo-эндпоинт

  • GET /userinfo (требуется bearer-токен)
  • JSON-ответ
  • Claim sub всегда присутствует
  • Фильтрация claims по scope (openid, email, phone и др.)
  • Параметр claims — точный выбор claims для каждого запроса
  • Локализованные claims (name#fr, name#fr-CA) с fallback
  • Подписанный JWT-ответ UserInfo — возвращается при Accept: application/jwt
  • Зашифрованный ответ UserInfo — не реализован

Параметры запроса авторизации

  • scope=openid — обязателен для активации OIDC
  • nonce — защита ID-токена от replay-атак
  • max_age — максимальный возраст аутентификации
  • prompt — none (тихая повторная аутентификация) и login (принудительная)
  • acr_values — запрашиваемый контекст аутентификации
  • login_hint — предзаполнение email или телефона
  • id_token_hint — подсказка для тихой повторной аутентификации
  • ui_locales — предпочтительные языки интерфейса и локализованных claims
  • claims — явный запрос claims для userinfo и id_token
  • request — JWT-закодированный объект запроса — не реализован
  • request_uri — URI, указывающий на объект запроса — не реализован

Стандартные claims (раздел 5.1)

  • sub — идентификатор субъекта
  • email и email_verified
  • phone_number и phone_number_verified
  • Кастомные claims по scope (полностью настраиваемые)
  • Локализованные варианты claims (claim#locale)
  • address — структурированный адрес — не встроенный тип
  • updated_at — не отслеживается как отдельное поле

Discovery

  • GET /.well-known/openid-configuration — не реализован (см. страницу RFC 8414)

Управление сессиями и выход

  • Session Management (спецификация OIDC Session Management) — не реализован
  • Back-Channel Logout — не реализован
  • Front-Channel Logout — не реализован