Приложения и доступ к API

PKCE

Определение

PKCE — расширение OAuth, которое связывает запрос авторизации с последующим запросом токена через случайное проверочное значение и производную от него строку.

Также ищут: Proof Key for Code Exchange · защита обмена кода · проверочное значение PKCE

Зачем это знать

Новый секрет каждого обмена снижает возможность использовать перехваченный код. Он не заменяет проверку клиента, адреса возврата или пользователя и требует защищённого хранения.

Связи из словаря

Карта понятия

Доказательная часть

Что подтверждено

  1. Клиент создаёт секретное проверочное значение, отправляет производную от него строку в запросе авторизации и предъявляет исходное значение при обмене кода на токен.

    Граница применимости: Последовательность PKCE по RFC 7636.

  2. PKCE связывает обмен кода со знанием исходного проверочного значения. Эта проверка не подтверждает личность клиента или пользователя и не заменяет точное сопоставление Redirect URI.

    Граница применимости: Граница PKCE по RFC 7636 и RFC 9700: соответствие проверочного значения исходному запросу отдельно от аутентификации клиента, проверки пользователя и адреса возврата.

  3. В методе S256 проверочное значение обрабатывается SHA-256, а результат кодируется Base64url без завершающего заполнения. В запросе авторизации передают производную строку, а исходное значение — при обмене кода.

    Граница применимости: Вычисление производной строки для S256 по RFC 7636, раздел 4.2. Хеширование здесь связывает два запроса, а не шифрует весь протокол.

  4. Клиент создаёт новое случайное проверочное значение для каждого запроса авторизации. Один общий постоянный проверочный секрет для всех обменов не соответствует назначению PKCE.

    Граница применимости: Создание проверочного значения по RFC 7636, раздел 4.1; генератор должен обеспечивать криптографическую случайность.

  5. В закрытом сценарии атакующий получил и код, и исходное проверочное значение, а других недоступных ему проверок нет. PKCE уже не отличает его от начавшего обмен клиента по знанию этого значения; публиковать его в журнале нельзя считать безопасным.

    Граница применимости: Редакторское применение модели PKCE и требования защищать данные авторизационного обмена; успех атаки при дополнительных проверках не утверждается.

Граница терминов

Не путать

PKCE Публичный клиент OAuth

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

PKCE Redirect URI

PKCE проверяет связь двух запросов через значение, а Redirect URI — адрес доставки ответа. Защита обмена не делает произвольное перенаправление допустимым.

Перед спецификацией

Что проверить

  1. Создайте новое случайное значение для запроса.
  2. Свяжите его с конкретным обменом.
  3. Используйте применимый метод S256.
  4. Передайте производную в запросе авторизации.
  5. Предъявите исходное значение только при обмене кода.
  6. Сохраните проверки клиента и адреса возврата.
  7. Не записывайте исходное проверочное значение в журнал.
Открытые основания

Первоисточники

  • Стандарт3
  • Первичная спецификация
    Proof Key for Code Exchange by OAuth Public Clients Internet Engineering Task Force · RFC 7636, September 2015 · проверено

    Определяет code verifier и derived code challenge для привязки authorization code к начавшему flow client instance.

    Утверждения: 01 · 02 · 03 · 04 · 05

  • Первичная спецификация
    Best Current Practice for OAuth 2.0 Security Internet Engineering Task Force · RFC 9700, January 2025 · проверено

    Актуализирует OAuth security: exact redirect matching, PKCE, sender-constrained tokens и безопасный refresh-token lifecycle.

    Утверждения: 02 · 05

  • Первичная спецификация
    The OAuth 2.0 Authorization Framework Internet Engineering Task Force · RFC 6749, October 2012 · проверено

    Определяет роли OAuth, authorization grants, access и refresh tokens, client types и основные grant flows.

Подтвердите действие