Почему для веб- и мобильных клиентов рекомендуют authorization code flow с PKCE, а implicit flow считают устаревшим?
- Что такое 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 сессии
Подробно
У публичного клиента — 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 медленнее, так как требует двух обращений к серверу авторизации
- ✗Implicit не поддерживает refresh-токены, а по безопасности потоки одинаковы
- ✓Implicit отдаёт токен прямо в редиректе, а PKCE защищает обмен кода у публичного клиента
- ✗PKCE позволяет обойтись без сервера авторизации
Что спросят дальше
- Что такое code verifier и code challenge?
- Чем OIDC дополняет OAuth2?
Разбор темы
- Аутентификация: JWT, OAuth2/OIDC и method security
Структура и валидация JWT, проблема отзыва, роли OAuth2 и authorization code flow, OIDC, и авторизация на уровне методов.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.