Спецификация: 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снаружи объекта обязан совпадать с claimclient_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)