Ответ вслух Middle Аутентификация обновлено

Как работает вход через провайдера

Вопрос

Расскажи, как работает «Войти через Яндекс» по шагам. Какой поток OAuth ты бы использовал в SPA?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Это OpenID Connect поверх OAuth 2.0, поток Authorization Code с PKCE. Приложение генерирует случайный codeverifier, считает от него SHA-256 и редиректит пользователя на провайдера с clientid, redirecturi, нужными scope, codechallenge и случайным state.

Что должно прозвучать в ответе

  • 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 ошибок.

Термины по теме