Публичный клиент не умеет защищать общий встроенный секрет; PKCE использует новое значение для каждого обмена. Это разные свойства клиента и потока.
PKCE
Определение
PKCE — расширение OAuth, которое связывает запрос авторизации с последующим запросом токена через случайное проверочное значение и производную от него строку.
Также ищут: Proof Key for Code Exchange · защита обмена кода · проверочное значение PKCE
Зачем это знать
Новый секрет каждого обмена снижает возможность использовать перехваченный код. Он не заменяет проверку клиента, адреса возврата или пользователя и требует защищённого хранения.
Карта понятия
Что подтверждено
Клиент создаёт секретное проверочное значение, отправляет производную от него строку в запросе авторизации и предъявляет исходное значение при обмене кода на токен.
Граница применимости: Последовательность PKCE по RFC 7636.
PKCE связывает обмен кода со знанием исходного проверочного значения. Эта проверка не подтверждает личность клиента или пользователя и не заменяет точное сопоставление Redirect URI.
Граница применимости: Граница PKCE по RFC 7636 и RFC 9700: соответствие проверочного значения исходному запросу отдельно от аутентификации клиента, проверки пользователя и адреса возврата.
В методе S256 проверочное значение обрабатывается SHA-256, а результат кодируется Base64url без завершающего заполнения. В запросе авторизации передают производную строку, а исходное значение — при обмене кода.
Граница применимости: Вычисление производной строки для S256 по RFC 7636, раздел 4.2. Хеширование здесь связывает два запроса, а не шифрует весь протокол.
Клиент создаёт новое случайное проверочное значение для каждого запроса авторизации. Один общий постоянный проверочный секрет для всех обменов не соответствует назначению PKCE.
Граница применимости: Создание проверочного значения по RFC 7636, раздел 4.1; генератор должен обеспечивать криптографическую случайность.
В закрытом сценарии атакующий получил и код, и исходное проверочное значение, а других недоступных ему проверок нет. PKCE уже не отличает его от начавшего обмен клиента по знанию этого значения; публиковать его в журнале нельзя считать безопасным.
Граница применимости: Редакторское применение модели PKCE и требования защищать данные авторизационного обмена; успех атаки при дополнительных проверках не утверждается.
Не путать
PKCE проверяет связь двух запросов через значение, а Redirect URI — адрес доставки ответа. Защита обмена не делает произвольное перенаправление допустимым.
Что проверить
- Создайте новое случайное значение для запроса.
- Свяжите его с конкретным обменом.
- Используйте применимый метод S256.
- Передайте производную в запросе авторизации.
- Предъявите исходное значение только при обмене кода.
- Сохраните проверки клиента и адреса возврата.
- Не записывайте исходное проверочное значение в журнал.
Первоисточники
- Best Current Practice for OAuth 2.0 Security
Актуализирует OAuth security: exact redirect matching, PKCE, sender-constrained tokens и безопасный refresh-token lifecycle.
- The OAuth 2.0 Authorization Framework
Определяет роли OAuth, authorization grants, access и refresh tokens, client types и основные grant flows.