Разработка OAuth

URL авторизации OAuthи разбор callback

Загрузите открытый пример, сравните запрос с ответом, затем подставьте свои значения.

URL авторизации OAuth

Ввод запроса

Вводите исходные значения. Зарегистрированный redirect URI сохраняется точно.

Результат

Всё обрабатывается в этой вкладке. Ввод не отправляется и не сохраняется.

Параметры

response_type=code · поток кода авторизации

Сохраните verifier для запроса токена. В URL входит только challenge; отчёт исключает verifier.

По одной исходной паре key=value на строку. Не кодируйте заранее и не повторяйте резервные поля.

Введите значения или загрузите пример.

Другой порт, лишний слеш в адресе возврата или плюс, превратившийся в пробел, могут остановить вход. Здесь URL авторизации OAuth показан рядом с таблицей декодированных значений. Так проще увидеть разницу между настройками клиента и тем, что действительно попало в строку запроса.

Если тестовый ответ уже получен, вставьте его в режиме разбора callback. Ожидаемый state укажите отдельно, взяв значение из той же транзакции. Повторяющиеся имена остаются отдельными строками: успешный разбор текста не подтверждает действительность кода, токена или личности пользователя.

Зачем проверять URL авторизации OAuth

Verifier остаётся вне запроса

URL авторизации OAuth получает только challenge S256 и название метода. Исходный verifier остаётся в поле ввода; отдельная кнопка позволяет скопировать его для последующего запроса токена. В экспортируемый отчёт verifier тоже не включается, поэтому его нельзя случайно перепутать с отправляемым challenge.

Несколько карточек параметров собираются в адресную строку, а закрытый ключ остаётся рядом.

Дубликаты не скрываются

Если state присутствует и в query, и во fragment, обе строки сохраняют свой источник и порядок. Даже одинаковые значения считаются неоднозначными. Совпадение первой строки не должно скрывать второй параметр, которого приложение не ожидало.

Адрес callback разделяется на две колонки с сохранением одинаково окрашенных повторяющихся строк.

Свяжите запрос с полученным ответом

01

Вставьте зарегистрированный URI без изменений

Проверьте схему, порт, путь, завершающий слеш и query в URI перенаправления. Не кодируйте заранее весь адрес. Дополнительные параметры задаются исходными строками key=value; знак & внутри значения остаётся частью этого значения.

02

Обновляйте случайные значения осознанно

Генератор использует по 32 независимых случайных байта для state и verifier. Если scope содержит отдельное значение openid, обновляется и nonce. Перед применением проверьте число изменяемых полей и сохраните verifier для этой транзакции. Правка scope не запускает новую генерацию.

03

Выберите момент пересчёта

Автоматический режим ждёт 350 мс после последней правки. Если его выключить, доступны кнопка запуска и Ctrl/Cmd+Enter. Устаревший результат нельзя экспортировать. Переключение режима сохраняет ввод, но ожидаемый state для callback остаётся самостоятельным полем.

Кодирование и параметры транзакции

Вложенный адрес остаётся одним значением

Весь redirect_uri кодируется как один параметр. Уже имеющийся query конечной точки строго декодируется и собирается заново вместе с полями формы. Буквальный плюс в дополнительном значении становится %2B; пробелы обрабатываются по правилам форм.

S256 по исходным байтам

Verifier должен содержать от 43 до 128 разрешённых символов. Пробелы не обрезаются, предварительное декодирование Base64 не выполняется. Отключение PKCE убирает challenge и метод из адреса, сохраняя введённый verifier для дальнейшей работы.

Только один проход декодирования

Поддерживаются полный URL, ?query, #fragment и отдельная строка query. Последовательность %252F превращается в %2F, а не в слеш. Пустые имена, пустые значения и повторы остаются в исходном порядке, без перезаписи в объекте.

Отдельный результат каждого сравнения

Параметр state может отсутствовать, быть пустым, повторяться, не проверяться, совпадать или отличаться. Если код авторизации смешан с error, появится предупреждение. Таблица раскрывает по 50 строк, а отчёт всегда содержит полный набор параметров.

Поддерживаемые форматы и ограничения

Только поток authorization code
response_type зафиксирован как code. Implicit, hybrid и plain PKCE не предлагаются. В этой форме nonce требует openid в scope. Настоящая проверка nonce выполняется приложением при валидации ID token, а не при чтении callback.
Синтаксис не подтверждает регистрацию
Конечная точка авторизации требует HTTPS. HTTP разрешён для локальных тестов на localhost, 127.0.0.1 и [::1]. Redirect также допускает частные схемы обратного домена, например com.example.app:/cb. Учётные данные, фрагменты, исходные пробелы и ошибочные escape-последовательности отклоняются. Настройки провайдера проверяются отдельно.
Зарезервированные поля нельзя подменить
Query и дополнительные строки не должны повторять имена или переопределять поля формы. Секреты, verifier, токены, объекты request и response_mode в них запрещены. Готовые профили провайдеров, Discovery, JAR/PAR и приём form_post не поддерживаются.
Разбор заканчивается до входа
Страница не открывает адрес авторизации, не принимает реальный callback и не обменивает код на токен. Обычные якоря и маршруты hash router отклоняются. Совпадение state не проверяет подпись, издателя, связь с сессией, срок действия или успешность авторизации.
Ограничения размера и хранения
Поля конструктора вместе ограничены 32 768 символами; callback и ожидаемый state имеют такой же лимит каждый. Допускается до 100 параметров. Постоянная история не сохраняется. Пример, очистка и замена случайных значений требуют просмотра кандидата; одно действие отмены возвращает и ввод, и результат.

Вопросы про URL авторизации OAuth

Почему URI перенаправления должен точно совпадать?

Различие в схеме, порте, пути или последнем слеше может обозначать другого получателя. Зарегистрируйте у провайдера фактический адрес. Инструмент сохраняет введённую строку как значение параметра, но не читает регистрационные настройки клиента.

Чем отличаются state и nonce?

State возвращается параметром callback и сравнивается с исходным значением транзакции. Nonce связан с ID token и проверяется после валидации этого токена. Наличие nonce во вставленном callback не заменяет такую проверку.

Нужен ли PKCE, если уже есть секрет клиента?

Секрет аутентифицирует клиента на конечной точке токенов. PKCE дополнительно связывает код с исходным verifier. Современные рекомендации предусматривают PKCE и для конфиденциальных клиентов. Проверьте поддержку S256 вашим провайдером.

Можно ли помещать client ID в URL?

Да, это открытый идентификатор. client_secret и code_verifier выполняют другие задачи и не должны попадать в query авторизации. Инструмент блокирует эти имена и предлагает отдельную кнопку копирования verifier.

В чём разница между OAuth и OpenID Connect?

OAuth предоставляет доступ к ресурсам. OpenID Connect добавляет аутентификацию пользователя и ID token. Включите openid в scope и при необходимости nonce согласно требованиям провайдера. Проверка возвращённого токена остаётся задачей приложения.

Нашли ошибку вычисления или проверки?

Подготовьте следующий запрос

Сопоставьте URL авторизации OAuth с регистрацией клиента, затем разберите callback с тем state, который был сохранён для этой конкретной транзакции.