VersolaVersola/docs
versola.kzGitHub

RFC 7636 — PKCE

Proof Key for Code Exchange для OAuth-клиентов

Спецификация: RFC 7636

PKCE (Proof Key for Code Exchange) предотвращает атаки перехвата кода авторизации. OAuth 2.1 требует PKCE для всех клиентов; Versola применяет его к каждому запросу авторизации вне зависимости от типа клиента.

Code Verifier

  • Валидация формата: только символы [A-Za-z0-9._~-]
  • Валидация длины: 43–128 символов (раздел 4.1)
  • Передаётся при обмене кода как code_verifier

Code Challenge

  • Метод S256: BASE64URL(SHA256(ASCII(code_verifier))) (раздел 4.2)
  • Метод plain: code_challenge = code_verifier (раздел 4.2)
  • Сохраняется на стороне сервера и привязывается к коду авторизации
  • Проверяется при обмене кода до его использования

Запрос авторизации

  • Параметр code_challenge — обязателен (строже спецификации: Versola отклоняет запросы без него)
  • Параметр code_challenge_method — опционален, по умолчанию plain согласно RFC
  • Невалидный или отсутствующий code_challenge возвращает ошибку invalid_request

Запрос токена

  • Параметр code_verifier — обязателен при использовании PKCE
  • Сервер отклоняет несовпадающий verifier с ошибкой invalid_grant
  • Защита от повторного использования: код авторизации однократный

Замечания по безопасности

Versola применяет PKCE ко всем запросам авторизации, не только к публичным клиентам. plain технически поддерживается по RFC, но настоятельно рекомендуется S256.