Как работает вход через провайдера
Вопрос
Расскажи, как работает «Войти через Яндекс» по шагам. Какой поток OAuth ты бы использовал в SPA?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Authorization Code flow с PKCE: стандарт для SPA и мобильных
Клиент генерирует `code_verifier`, отправляет хеш `code_challenge` и `state` при редиректе
Пользователь входит у провайдера, тот возвращает `code` на redirect_uri
Обмен `code` + `code_verifier` на токены; при OIDC приходит `id_token`
`state` защищает от CSRF, PKCE от перехвата code; implicit flow устарел
Что могут спросить следом
- Зачем нужен параметр
state? - Почему implicit flow больше не рекомендуют?
- Чем
id_tokenотличается отaccess_token?
Разбор
Это OpenID Connect поверх OAuth 2.0, поток Authorization Code с PKCE. Приложение генерирует случайный code_verifier, считает от него SHA-256 и редиректит пользователя на провайдера с client_id, redirect_uri, нужными scope, code_challenge и случайным state. Пользователь логинится у провайдера, соглашается дать доступ, и провайдер редиректит обратно с одноразовым code и тем же state. Клиент проверяет, что state совпадает, и обменивает code вместе с исходным code_verifier на токены. Провайдер сверяет хеш, и только тогда выдаёт access_token, а в OIDC ещё id_token, где лежат данные пользователя. Дальше бэкенд обычно заводит свою сессию. Implicit flow, где токен сразу приходил в URL, сейчас не используют: токен светился в истории и логах, а PKCE решает ту же задачу безопасно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.