Есть ли опыт работы с OAuth авторизацией
Что проверяют
Работали ли вы с OAuth руками и понимаете ли, какие решения при этом принимает фронтенд: какой поток выбрать, где хранить токены, как защититься от подмены ответа. Следом почти всегда спрашивают, чем OAuth отличается от OpenID Connect и почему implicit flow больше не используют.
Как отвечать
Стройте ответ вокруг своего проекта: какой провайдер (Google, Яндекс ID, VK ID, корпоративный Keycloak), какой фреймворк, что делали лично вы. Технический каркас:
- Authorization Code + PKCE: стандарт для SPA. Клиент генерирует
code_verifier, отправляет его хэш какcode_challengeс методомS256, а при обмене кода на токен предъявляет исходную строку. От implicit flow прямо отговаривает RFC 9700 (Security BCP), в черновике OAuth 2.1 его нет вовсе; state: случайное значение, которое сверяется после редиректа и защищает callback от CSRF;- OAuth и OIDC: OAuth выдаёт доступ к API через
access_token, а кто вошёл, сообщает OIDC вid_token; - хранение токенов:
localStorageдоступен любому XSS. Надёжнее схема BFF: код на токен меняет свой бэкенд, браузер получает только httpOnly-куку сSameSite; - обновление: refresh token с ротацией, повтор запроса после
401и защита от параллельных обновлений.
Библиотеки называйте реальные: oidc-client-ts, keycloak-js, @azure/msal-browser, Auth.js для Next.js. Результат подкрепите своими цифрами, если они есть, и не придумывайте проценты.
Если опыта не было, так и скажите и покажите, что понимаете схему: пройдите поток по шагам и объясните, почему выбрали бы PKCE и BFF. Честное «подключал через готовый SDK, внутрь не лез, но поток понимаю» звучит лучше выдуманной истории.
Где спотыкаются
Называют OAuth протоколом аутентификации и путают access_token с id_token, определяя пользователя по токену, выданному для API.
Хранят токены в localStorage и не видят в этом проблемы, а на вопрос про XSS отвечают «у нас React, он всё экранирует».
Кладут client_secret в код фронтенда. SPA это публичный клиент: всё, что попало в бандл, может прочитать любой.