Получить доступ

Почему для веб- и мобильных клиентов рекомендуют authorization code flow с PKCE, а implicit flow считают устаревшим?

SeniorSpring Security
Ещё спрашивают так:
  • Что такое PKCE?
Коротко

Implicit отдавал access token прямо в URL после редиректа — он попадал в историю, логи, Referer и был доступен скриптам. Authorization code + PKCE: клиент получает одноразовый код, а обмен кода на токен подтверждает секретным code_verifier, хеш которого отправлен заранее.

  • PKCE защищает от перехвата кода (вредное приложение на телефоне, утечка редиректа)
  • OAuth 2.1 убирает implicit и password grant
  • Токены — в памяти или httpOnly-cookie через BFF, не в localStorage

А ещё Для SPA часто BFF: токены держит сервер, браузер — только cookie сессии

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

У публичного клиента — SPA или мобильного приложения — нет места, где безопасно хранить клиентский секрет, поэтому обычный authorization code flow был для них неприменим, и исторически использовали implicit. Его беда в том, что access-токен приходит во фрагменте URL: он оседает в истории браузера, в логах прокси и реферерах. PKCE решает задачу иначе: клиент генерирует случайный verifier, отправляет его хеш при запросе кода, а при обмене кода на токен предъявляет сам verifier — перехваченный код без него бесполезен. Поэтому в OAuth 2.1 implicit исключён, а authorization code с PKCE рекомендован всем клиентам, включая конфиденциальные.

Что хотят услышать

  • Проблема implicit.
  • Шаги authorization code + PKCE.
  • OAuth 2.1, хранение токенов, BFF.

Частые ошибки

  • Считать PKCE нужным только мобильным приложениям.
  • Хранить клиентский секрет в коде SPA.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Implicit возвращает токен прямо в редиректе, где он попадает в историю и логи; PKCE защищает обмен кода на токен от перехвата у публичного клиента без секрета
  • ✗Implicit медленнее, так как требует двух обращений к серверу авторизации
  • ✗Implicit не поддерживает refresh-токены, а всё остальное одинаково
  • ✗PKCE позволяет обойтись без сервера авторизации

Что спросят дальше

  • Что такое code verifier и code challenge?
  • Чем OIDC дополняет OAuth2?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем