Разработка OAuth

Генератор PKCEСоздайте пару или проверьте совпадение

Вычислите S256 по точному значению verifier и при необходимости сравните challenge.

Генератор PKCE

Code verifier

От 43 до 128 символов ASCII: A–Z, a–z, 0–9, -, ., _, ~. Пробелы и переводы строк не удаляются.

Ожидаемый code challenge (необязательно)

Оставьте поле полностью пустым, чтобы не сравнивать. Иначе нужны ровно 43 символа канонического Base64URL без заполнения =.

Результат S256

Допустимый синтаксис не доказывает случайность или непредсказуемость введённого verifier.

Значения обрабатываются на этой странице; инструмент не отправляет и не сохраняет их.

Параметры

Выбор влияет только на следующую явную генерацию. Байты кодируются в Base64URL без заполнения; выход SHA-256 всегда содержит 256 бит.

Вставьте verifier или откройте предпросмотр случайного значения.

Этот генератор PKCE пригодится при отладке обмена кода авторизации на токен. Вставьте исходный проверочный код, чтобы воспроизвести challenge, или явно запросите случайное значение для новой попытки авторизации.

Параметр code_challenge отправляют при авторизации, а code_verifier сохраняют до запроса токена. Совпадение подтверждает связь двух значений, но не проверяет redirect URI, настройки клиента или успешность входа у провайдера.

Зачем нужен генератор PKCE

Проверьте значение из конкретного запроса

Когда сервер сообщает о несовпадении, важно взять verifier из той же попытки авторизации. Генератор PKCE пересчитывает его challenge и не подменяет исходное значение случайным при открытии страницы.

Случайные байты превращаются в verifier, затем хеширование создаёт challenge фиксированной длины.

Отделите ошибку формата от другой пары

Недопустимый символ, неканоническое окончание Base64URL и корректный, но чужой challenge — разные причины сбоя. Проверка формата и отдельный статус сравнения помогают выбрать следующий шаг отладки.

Один verifier сравнивается с двумя challenge: один совпадает, другой отличается.

Как сохранить связь с попыткой авторизации

01

Начните с исходного verifier

При загрузке поля пусты, случайные значения не создаются. По умолчанию генерация использует 32 байта и даёт 43 символа. Выбор другого размера сам по себе ничего не генерирует.

  • Для новой попытки нужен новый непредсказуемый verifier; во время текущего обмена сохраняйте исходный.
02

Сверьте отправленный challenge

Необязательное поле должно быть полностью пустым для пропуска сравнения. Автоматический расчёт запускается через 350 мс после правки. Выключите его для кнопки «Вычислить» или сочетания Ctrl/Cmd+Enter.

  • Пробел в ожидаемом challenge считается ошибкой, а не пустым вводом.
03

Посмотрите замену перед применением

Генерация, пример и очистка показывают предпросмотр с количеством заменяемых символов. «Применить» подтверждает действие, «Вернуть» восстанавливает предыдущие поля и результат. Проверьте статус перед экспортом.

  • Копирование и скачивание недоступны для устаревшего результата и при открытом предпросмотре.

Что можно вычислить и выгрузить

Четыре размера случайного источника

32, 48, 64 и 96 байт дают verifier длиной 43, 64, 86 и 128 символов. Используется криптографический источник браузера; генерация требует явного действия.

Точное преобразование S256

SHA-256 вычисляется по ASCII-байтам verifier. Полученные 32 байта хеша кодируются в Base64URL без заполнения, поэтому challenge всегда имеет длину 43 символа.

Сравнение с готовым challenge

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

Полный JSON-отчёт

Копируйте verifier и challenge отдельно либо весь отчёт; его также можно скачать. В JSON входят метод, длина, синтаксис, ожидаемый challenge, статус сравнения и сведения об источнике случайности.

Границы проверки

Без исправления входных данных
Verifier должен содержать 43–128 незарезервированных символов ASCII. Пробелы не обрезаются, регистр не меняется, URL-последовательности не декодируются. Кавычки, Unicode и заполнение = отклоняются.
Каноническая запись challenge
Ожидаемый S256 challenge содержит ровно 43 символа Base64URL. Два завершающих бита заполнения должны быть нулевыми; альтернативная запись тех же байтов не принимается.
Только метод S256
Инструмент не поддерживает plain, не восстанавливает verifier из хеша, не выполняет вход или обмен токенов. Совпадение не подтверждает настройки сервера авторизации.
Энтропию нельзя узнать по длине
Для генерации доступны 256, 384, 512 или 768 случайных бит источника. Это не стойкость PKCE: SHA-256 по-прежнему выдаёт 256 бит. Даже допустимый длинный текст может быть предсказуемым.
Пара относится к одной попытке
Не используйте одну пару для нескольких новых авторизаций. Пример RFC общедоступен и предназначен лишь для проверки алгоритма, а не для секретного значения в рабочем приложении.

Вопросы про генератор PKCE

Нужен ли PKCE, если уже есть client_secret?

PKCE связывает запрос токена с конкретной попыткой авторизации, а client_secret служит для аутентификации клиента. Это разные задачи, поэтому наличие секрета не заменяет PKCE. Поддержку и требования провайдера проверяйте отдельно; этот генератор PKCE проверяет только пару значений.

Можно ли обойтись методом plain?

Когда клиент умеет вычислять SHA-256, используйте S256. В plain challenge совпадает с самим verifier; эта страница такой вариант не создаёт и не использует его как запасной метод при ошибке WebCrypto.

Как правильно закодировать PKCE для публичного OAuth-клиента в PowerShell?

Возьмите ASCII-байты исходного code_verifier, вычислите SHA-256, затем закодируйте бинарный хеш в Base64. Замените + на -, / на _ и уберите завершающие =. Не кодируйте шестнадцатеричную строку хеша: она даст другой challenge.

Почему OAuth2 возвращает ошибку «Code verifier is invalid»?

Проверьте диапазон 43–128 символов, разрешённый алфавит и отсутствие пробелов. Затем убедитесь, что запрос токена содержит verifier именно этой попытки авторизации. Локально допустимый формат ещё не означает, что все параметры запроса верны.

Почему возникает «Transformed code verifier does not match code challenge»?

Обычно нужно проверить, не сменился ли verifier между авторизацией и запросом токена и правильно ли реализовано S256. Сравните ожидаемый challenge с вычисленным, проверьте метод, случайные переводы строк и кодирование бинарного хеша вместо его текста.

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

Проверьте значения своей транзакции

Откройте генератор PKCE с исходным verifier, сравните challenge из запроса и выгрузите актуальный отчёт для дальнейшей отладки.