RFC 7519 — JSON Web Token — Versola Docs
/docs
До 1.00.7.5versola.ioGitHub

RFC 7519 — JSON Web Token

Структура JWT, алгоритмы подписи и claims для access token, ID token и других подписанных объектов

Спецификация: 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 и не выводится из ключа тенанта.

Куда смотреть

Профили безопасности перечисляют, какие алгоритмы подписи допускает каждый профиль тенанта.