Экран согласия
Пользователя отправляют на authorization_endpoint из метаданных.
| Параметр | Что означает |
|---|---|
response_type * | code |
client_id * | идентификатор приложения |
redirect_uri * | адрес возврата; должен совпадать с зарегистрированным |
state * | случайная строка; вернётся без изменений, по ней сверяется подлинность возврата |
code_challenge * | SHA-256 от code_verifier в base64url |
code_challenge_method * | S256 |
scope | запрашиваемые права через пробел; без него запрашиваются все права приложения |
resource | адрес сервиса, для которого нужен токен (см. ниже) |
https://id.invoicebox.ru/oauth/authorize?response_type=code&client_id=my-service&redirect_uri=https%3A%2F%2Fmy-service.ru%2Fauth%2Fcallback%2F&state=8f2c…&code_challenge=k7Yb…&code_challenge_method=S256&scope=merchant-read
Пользователь входит (или уже вошёл) и видит, какое приложение просит доступ и какие права. Дальше одно из двух:
- нажал «Разрешить» — возврат на
redirect_uriс параметрамиcodeиstate; - нажал «Отклонить» — возврат на
redirect_uriсerror=access_deniedи тем жеstate.
Отказ приходит именно ответом, а не молчанием: приложение должно узнать, что доступ не дали, а не ждать код, который никогда не придёт.
Если параметры запроса неверны — незнакомый client_id, чужой адрес возврата, права, которых у
приложения нет, — пользователь остаётся на нашей странице с объяснением. По непроверенному адресу
возврата мы никого не отправляем: именно так работает открытый редирект.