RFC 9101 — Подписанный запрос авторизации (JAR) — Versola Docs
/docs
До 1.00.7.5versola.ioGitHub

RFC 9101 — Подписанный запрос авторизации (JAR)

Запрос авторизации OAuth 2.0 в виде подписанного JWT, переданного по значению в параметре request, и правила проверки объекта запроса.

Спецификация: RFC 9101

JAR передает параметры запроса авторизации как claims JWT, который подписывает клиент, вместо обычных параметров запроса, которые user agent мог бы подменить. Объект запроса можно отправить по значению (request) на /authorize или заранее передать через RFC 9126 и использовать по request_uri.

Статус

Реализован частично. Отмечено пунктов: 17 из 19.

Объект запроса

  • Параметр request с подписанным JWT, отправленный на /authorize (§5.1) или переданный через /par (§5.2.1) (JarFlowSpec)
  • Используется только то, что несет объект; параметр запроса не может повторить его или дополнить (JarFlowSpec)
  • Подпись проверяется по зарегистрированному JWK Set клиента (§10) — тем же ключам, что использует private_key_jwt (JarFlowSpec)
  • Алгоритм подписи ограничен request_object_signing_alg_values_supported (§4); alg: none и алгоритмы HMAC не принимаются никогда
  • typ: oauth-authz-req+jwt принимается, если указан, и не обязателен (§9.4.1, §10.8); другие значения отклоняются, кроме JWT
  • client_id вне объекта должен совпадать с claim client_id внутри (§6.3) (JarFlowSpec)
  • iss должен быть равен client_id — поддерживаются только объекты, подписанные клиентом; объекты, подписанные третьей стороной (§1(d)), нет
  • aud: на тенанте fapi2 ровно issuer, строкой; на тенанте standard issuer или URL authorization endpoint (§4; JarFlowSpec)
  • exp обязателен и ограничен максимумом client assertion тенанта — RFC оставляет его необязательным (§4)
  • nbf: обязателен на тенанте fapi2, необязателен на standard; если указан, не старше 60 минут, а exp — не позже чем через 60 минут после него (JarFlowSpec)
  • iat и nbf до 60 с в будущем принимаются, дальше — отклоняются (JarFlowSpec)
  • Защита jti от replay — тенант fapi2 требует jti; тенант standard проверяет его, если клиент прислал; повторно использованный объект отклоняется (#358; JarFlowSpec)
  • Вложенные объекты запроса отклоняются — объект, называющий собственный claim request или request_uri (§4, §10.7)
  • Защита от путаницы JWT — объект с sub, который выглядел бы как client assertion по RFC 7523, отклоняется (§10.8)
  • request_uri, который разрешается загрузкой URL, размещенного клиентом (§5.2) — не реализовано; request_uri на /authorize всегда называет pushed request из /par и никогда не загружается по сети (§10.4 указывает на эту загрузку как на поверхность для request forgery)
  • Зашифрованные объекты запроса (JWE) — не поддерживаются; принимаются только подписанные объекты

Метаданные клиента

  • require_signed_request_object (§10.5) — клиенту с этим флагом отказывают при обычном наборе параметров на /authorize и при неподписанной отправке на /par; регистрация отклоняет флаг, если у клиента нет JWK Set (JarFlowSpec)

Метаданные authorization server

  • request_object_signing_alg_values_supported (§4)
  • request_parameter_supported: true и request_uri_parameter_supported: true — второе означает только ссылки из PAR

Примечания

  • OpenID Connect Core §6 описывает то же для request; см. OpenID Connect Core.
  • На тенанте fapi2 правила nbf и jti следуют FAPI 2.0 Message Signing; см. FAPI 2.0.

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

Профили безопасности перечисляют правила nbf, jti и aud, которые различаются между профилями.