Спецификация: 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 — не реализован