Генератор PKCE code_verifier и code_challenge

Создайте или вставьте code_verifier и получите code_challenge S256 для OAuth 2.0 PKCE (RFC 7636).

code_challenge (S256)

Работает полностью в браузере. Введённые данные не отправляются и не сохраняются.

Как пользоваться

  1. Нажмите «Создать» для нового code_verifier или вставьте свой.
  2. code_challenge вычисляется как BASE64URL(SHA-256(code_verifier)).
  3. Передайте code_challenge и code_challenge_method=S256 в запросе авторизации.
  4. Передайте code_verifier в запросе токена.

PKCE (Proof Key for Code Exchange, RFC 7636) защищает поток OAuth 2.0 с кодом авторизации. Он создан для публичных клиентов — мобильных и десктопных приложений, SPA, — которые не могут надёжно хранить client secret. Перед перенаправлением клиент создаёт одноразовый секрет code_verifier и отправляет только его хеш — code_challenge. При обмене кода на токены он передаёт исходный verifier, и сервер проверяет, что значения совпадают. Перехватив один лишь код, злоумышленник не сможет его использовать.

Генератор берёт 32 случайных байта из crypto.getRandomValues браузера и кодирует их в base64url без выравнивания, поэтому verifier получается длиной 43 символа. code_challenge — это SHA-256 от verifier, тоже в base64url без выравнивания, и его длина всегда 43 символа. Доступен только метод S256: в RFC 7636 есть и plain, но если клиент умеет считать SHA-256, он обязан использовать S256. Инструмент пригодится для отладки входа через OAuth, сверки с выводом вашей библиотеки и ручной сборки тестовых запросов.

Вставленный verifier хешируется как есть, без проверки формата. Убедитесь сами, что он содержит от 43 до 128 символов из набора A–Z, a–z, 0–9, «-», «.», «_» и «~». Для каждого запроса авторизации создавайте новый verifier. Оба значения вычисляются на этой странице через Web Crypto API и никуда не отправляются.

Частые вопросы

Что такое PKCE?

Proof Key for Code Exchange (RFC 7636). Клиент отправляет хешированный code_challenge при авторизации и исходный code_verifier при запросе токена, поэтому одного перехваченного кода авторизации недостаточно.

Как вычисляется code_challenge?

Для S256: SHA-256 от code_verifier в ASCII, затем base64url без дополнения. Для примера из RFC 7636 dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk получается E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM.

Почему созданный verifier длиной 43 символа?

32 случайных байта в base64url без дополнения — это 43 символа, минимальная длина по RFC 7636 (от 43 до 128 символов из A-Z, a-z, 0-9, -, ., _, ~).

Похожие инструменты