PKCE: Как конечная точка перенаправления узнает code_verifier?

У меня есть вопрос по поводу PKCE (RFC 7636). Клиенты OAuth, использующие предоставление кода авторизации, имеют два компонента: (1) часть на устройстве владельца ресурса, которая инициирует запрос авторизации, и (2) конечная точка перенаправления на сервере, который может принимать и отправлять сообщения HTTPS.

Расширение PKCE для OAuth заставляет клиентов делать это:

  1. Создайте криптографическую случайную строку, которая называется code_verifier.
  2. Создайте дайджест SHA-256 для code_verifier и закодируйте его с помощью Base64. Отправьте это вместе с запросом на авторизацию.
  3. Когда клиент получает код авторизации и отправляет его в конечную точку токена для токена доступа, включите исходное значение code_verifier.

Шаг 2 происходит на устройстве владельца ресурса. Как только владелец ресурса одобрил запрос, его браузер перенаправляется на конечную точку перенаправления клиента. Шаг 3 происходит в конечной точке перенаправления.

Итак, вопрос в том, как конечная точка перенаправления узнает значение code_verifier? Он был сгенерирован на устройстве владельца ресурса.

2 ответа

Решение

Итак, вопрос в том, как конечная точка перенаправления узнает значение code_verifier? Он был сгенерирован на устройстве владельца ресурса.

Поскольку конечная точка перенаправления эффективно маршрутизирует к конечной точке на том же устройстве, которое вызвало конечную точку авторизации.

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

Клиенты OAuth, использующие предоставление кода авторизации, имеют два компонента: (1) часть на устройстве владельца ресурса, которая инициирует запрос авторизации, и (2) конечная точка перенаправления на сервере, который может принимать и отправлять сообщения HTTPS.

Конфиденциальные клиенты имеют конечную точку перенаправления на сервере, который может принимать и отправлять сообщения HTTPS.

Общедоступные клиенты - нет, а нативные клиенты, использующие PKCE, по- прежнему являются публичными клиентами.

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

PKCE Законный Поток Приложения

Допустимый поток приложений выглядит следующим образом, где запрос токена авторизации перенаправляется обратно в SystemBrowser, а затем обратно в исходное NativeApp.

PKCE Законный поток приложений

Код авторизации перехват атаки

Вредоносное приложение может быть введено в ОС. С или без PKCE, собственное приложение может получить код авторизации, но оно не будет знать верификатор и, следовательно, не сможет завершить обмен токенами.

PKCE Вредоносное приложение Перехват

Другие вопросы по тегам