Спецификация: 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вне объекта должен совпадать с claimclient_idвнутри (§6.3) (JarFlowSpec) -
issдолжен быть равенclient_id— поддерживаются только объекты, подписанные клиентом; объекты, подписанные третьей стороной (§1(d)), нет -
aud: на тенантеfapi2ровно issuer, строкой; на тенантеstandardissuer или 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, которые различаются между профилями.