Как работает OAuth 2.0 Authorization Code Flow с PKCE?
Аутентификация и сессии
Authorization Code Flow с PKCE — способ войти через сторонний сервис (Google, GitHub) для приложений, которые не могут хранить секрет: SPA и мобильные клиенты.
Шаги
- Клиент создаёт случайный
code_verifierи считаетcode_challenge = BASE64URL(SHA256(code_verifier)). - Клиент перенаправляет пользователя к провайдеру:
response_type=code,code_challenge,state. - Пользователь входит и разрешает доступ.
- Провайдер возвращает на
redirect_uriодноразовыйcodeиstate. - Клиент проверяет
stateи отправляетcodeвместе с исходнымcode_verifierна токен-эндпоинт. - Провайдер сверяет verifier с ранее присланным challenge и выдаёт токены.
Зачем PKCE
Если злоумышленник перехватит code из URL, он не сможет обменять его на токен: у него нет code_verifier. Раньше SPA использовали Implicit Flow, но он отдавал токен прямо в URL и считается устаревшим.
Роль state
state — случайная строка, которую клиент проверяет при возврате. Она защищает от CSRF в процессе авторизации.
Коротко для собеседования
Клиент получает код, а не токен, и обменивает его вместе с секретным verifier. Так перехваченный код бесполезен.