Спецификация: 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.