Спецификация: RFC 7519
JSON Web Token несут подписанные claims, которые можно проверить, не обращаясь к authorization server. Versola использует их для access token (профиль RFC 9068), ID token, ответов UserInfo и JARM, а также logout token.
Статус
Реализован частично. Отмечено пунктов: 17 из 22.
Алгоритмы подписи
Токены подписываются ключом, который выбрал тенант, поэтому алгоритм — тот, под которым опубликован этот ключ (см. RFC 7517).
-
PS256— RSASSA-PSS с SHA-256; допускается на любом тенанте -
ES256— ECDSA на P-256 с SHA-256; допускается на любом тенанте -
RS256— RSA PKCS#1 v1.5 с SHA-256; допускается как ключ подписи только на тенантахstandard, на тенантахfapi2отклоняется -
HS256— HMAC с SHA-256; только для внутренних сервисных токенов междуauth,centralиedge, никогда не публикуется -
EdDSA— не поддерживается -
ES384,ES512,PS384,PS512,RS384,RS512— не поддерживаются
Алгоритмы, принимаемые во входящих подписанных объектах:
| Объект | Принимаемые алгоритмы |
|---|---|
| DPoP proof (RFC 9449) | по умолчанию ES256, PS256; RS256 — только если оператор назвал его в dpop_signing_alg_values_supported |
| Client assertion (RFC 7523) | по умолчанию ES256, PS256; RS256 — только если назван в token_endpoint_auth_signing_alg_values_supported |
| Объект запроса (RFC 9101) | по умолчанию ES256, PS256; RS256 — только если назван в request_object_signing_alg_values_supported |
Стандартные claims (раздел 4.1)
-
iss— издатель -
sub— субъект (идентификатор пользователя или клиента) -
aud— аудитория -
exp— время истечения -
iat— время выпуска -
jti— уникальный идентификатор JWT -
nbf— не проставляется в выпускаемых access token и ID token; introspection возвращает его только для токена, который его несет
Поля заголовка JOSE
-
alg— алгоритм подписи -
typ—JWTдля ID token и других подписанных объектов,at+jwtдля access token -
kid— идентификатор ключа для ротации
Валидация
- Проверка подписи по JWKS, по
kid - Проверка срока действия (
exp) - Точная проверка
typ— ID token нельзя использовать как access token - Неподписанные токены (
none) отклоняются, потому что каждый токен должен находить ключ поkid - Проверка
nbfво входящих токенах — не выполняется, потому что выпускаемые токеныnbfне несут - JWE (зашифрованный JWT) — не поддерживается
Профиль access token
Access token следуют профилю JWT для access token OAuth 2.0 (at+jwt). Помимо зарегистрированных claims они несут client_id, scope, roles, tenant_id, sid, fam и cnf, а для пользовательских токенов — еще acr, amr и auth_time, и authorization_details, если они есть у grant.
Примечания
- Какие алгоритмы допускает каждый профиль тенанта, собрано в профилях безопасности.
id_token_signing_alg_values_supportedберется из хранимого документа discovery и не выводится из ключа тенанта.
Куда смотреть
Профили безопасности перечисляют, какие алгоритмы подписи допускает каждый профиль тенанта.