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

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

Параметры запроса авторизации OAuth 2.0 в виде подписанного JWT, через параметр `request`

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

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

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

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

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

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

Метаданные сервера авторизации

  • request_object_signing_alg_values_supported (§4)