Спецификация: RFC 9126
Pushed Authorization Requests позволяют клиенту отправить содержимое authorization request напрямую на authorization server аутентифицированным back-channel запросом и получить взамен request_uri. Через user agent проходит только эта ссылка, поэтому запрос нельзя прочитать или подменить по пути, а его размер не ограничен длиной URL.
Pushed Authorization Request Endpoint
-
POST /par— принимает параметры authorization request в форматеapplication/x-www-form-urlencoded - Аутентификация клиента — те же методы, что и на token endpoint (
client_secret_basic,client_secret_post) - Параметр
request_uriв pushed request отклоняется - Полная валидация authorization request до любого взаимодействия с пользователем
-
405 Method Not Allowedдля любого метода кромеPOST -
413 Content Too Largeдля тела больше 8 KiB -
429 Too Many Requests— ограничение частоты запросов по клиенту не реализовано - Параметр
request(JAR Request Objects, RFC 9101) — не реализован
client_id обязателен в теле pushed request и должен совпадать с аутентифицированным клиентом.
Пример
POST /par HTTP/1.1
Host: id.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0Mzo3RmpmcDBaQnIxS3REUmJuZlZkbUl3
response_type=code&client_id=s6BhdRkqt3
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
&scope=openid%20profile&state=af0ifjsldkj
&code_challenge=K2-ltc83acc4h0c9w6ESC_rEMTJ3bww-uCHaoeK1t8U
&code_challenge_method=S256
HTTP/1.1 201 Created
Content-Type: application/json
Cache-Control: no-store
{
"request_uri": "urn:ietf:params:oauth:request_uri:6esc_11ACC5bwc014ltc14eY22c",
"expires_in": 60
}
Ссылка request_uri содержит 256 бит энтропии и по умолчанию действительна 60 секунд (настраивается через par.request-uri-ttl). В базе хранится только keyed hash ссылки, поэтому доступа к дампу базы недостаточно для повторного использования pushed request.
Authorization Request
- Параметр
request_uriна/authorize— полностью заменяет содержимое pushed request - Привязка к клиенту, отправившему запрос — несовпадающий
client_idотклоняется - Одноразовое использование — ссылка удаляется при обработке authorization request
- Истекшие ссылки отклоняются
Параметры, переданные вместе с request_uri на authorization endpoint, игнорируются: приоритет имеет pushed payload.
Error Response
Ошибки используют формат token endpoint из RFC 6749 §5.2. Поскольку pushed request обрабатывается до взаимодействия с пользователем, ошибки валидации, которые обычно передаются редиректом обратно клиенту, возвращаются прямо в теле ответа:
HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store
{
"error": "invalid_request",
"error_description": "The request_uri parameter must not be provided to the pushed authorization request endpoint"
}
Authorization Server Metadata
-
pushed_authorization_request_endpoint— публикуется в документе метаданных сервера -
require_pushed_authorization_requests— не реализовано; PAR всегда опционален
Client Metadata
-
require_pushed_authorization_requests— не реализовано; PAR нельзя сделать обязательным для клиента
Не реализовано
- Redirect URI, задаваемые для отдельного запроса (RFC 9126 §2.4) —
redirect_uriпо-прежнему должен точно совпадать с зарегистрированным для клиента - JAR Request Objects (параметр
request, RFC 9101) - Ограничение частоты запросов с
429 Too Many Requests