Интервью-вопрос
С какими системами авторизации работал
Отвечайте через реальный опыт: какие схемы подключали, что делал фронтенд и какие риски вы учитывали. Важно не просто назвать JWT или OAuth, а показать работу с токенами, сессией, ролями и ошибками доступа.
- Добавлен
- Редакция
Подготовьте короткий ответ и пару деталей на случай уточняющих вопросов.
Мини-квиз
Проверка перед разбором
Несколько быстрых вопросов перед разбором. Так проще поймать места, которые только кажутся понятными.
Вопрос 1 из 50 правильно
Разбор
Разобраться, а не зазубрить
Дальше разбираем суть, типичные уточнения и места, где легко сказать лишнее или перепутать термины.
Базовая идея
Вопрос "С какими системами авторизации работал" лучше не воспринимать как просьбу перечислить все знакомые названия. Хороший ответ показывает три вещи: с чем вы реально работали, какую часть делали на фронтенде и какие риски учитывали.
Держите простую структуру:
- Назовите схему: cookie session, JWT, OAuth 2.0, SSO, Firebase Auth, Cognito или другое.
- Объясните вашу роль: login, callback, protected routes, refresh, logout, роли, обработка ошибок.
- Добавьте практический риск: XSS, CSRF, истечение токена, гонки refresh, server-side permission check.
- Не придумывайте опыт. Лучше честно сказать "интегрировал готовый SDK" или "делал учебный flow", чем уверенно заявить то, что не сможете объяснить.
Как сформулировать ответ
Если у вас был коммерческий опыт, можно ответить так. Замените стек и детали на свои:
В последнем проекте я работал с авторизацией на базе JWT и refresh token. На фронтенде делал форму входа, хранение состояния пользователя, защищенные маршруты, обработку 401 и logout. Access token был короткоживущим, refresh обновлялся через отдельный endpoint. Для ролей мы скрывали недоступные действия в UI, но права обязательно проверялись на API.
Если вы подключали OAuth или SSO:
Также интегрировал вход через внешнего провайдера. На клиенте обрабатывал redirect callback, состояние загрузки и ошибки, а обмен кода на сессию шел через бекенд. Я понимаю, что во фронтенде нельзя хранить client secret, поэтому для SPA важен PKCE и проверка state.
Если опыт небольшой, лучше не преувеличивать:
В продакшене я пока не проектировал auth с нуля, но интегрировал готовый провайдер и понимаю клиентскую часть: protected routes, состояние пользователя, logout, обработку 401 и ограничения хранения токенов в браузере.
Как выбрать угол ответа
Назовите стек, роль фронтенда, тип сессии и один сложный случай: refresh, SSO, роли или logout.Скажите честно: интегрировал SDK, callback, guards, состояние пользователя и обработку ошибок.Не выдавайте его за коммерческий. Сделайте акцент на понимании flow, угроз и ограничений клиента.Говорите про хранение токенов, XSS, CSRF, HTTPS, CSP и серверную проверку прав.Что именно делает фронтенд
Фронтенд обычно не выдает права и не является источником истины по доступу. Но именно он делает пользовательский flow понятным. Пользователь должен нормально пройти вход, восстановить сессию после перезагрузки, увидеть редирект на логин после истечения токена, выйти из аккаунта и получить понятную ошибку при запрете доступа.
Неудачная формулировка:
Мы проверяли роль на фронтенде, поэтому обычный пользователь не мог вызвать админское действие.
Проблема в том, что пользователь может открыть DevTools, вызвать API напрямую или изменить локальное состояние. Лучше сказать так:
На фронтенде мы скрывали админские действия и защищали route для UX, но API все равно проверял роль на сервере. Если сервер возвращал 403, клиент показывал понятную ошибку и не обновлял интерфейс как будто операция прошла.
Хранение токенов и сессии
В ответе важно не продавать один способ хранения как единственно правильный. У каждого варианта есть цена.
HttpOnly cookie не прочитает JavaScript, поэтому при XSS сложнее украсть сам токен. Но cookie автоматически отправляется браузером, значит нужно думать про SameSite, CSRF-токен или BFF-подход.
localStorage прост для SPA, но токен доступен любому скрипту на странице. In-memory хранение не сохраняет токен между перезагрузками, но XSS все равно может выполнить запрос от имени пользователя. Если в проекте был такой вариант, не защищайте его как идеальный. Скажите, почему его выбрали, какой TTL был у access token, какие меры были против XSS и как UI восстанавливал сессию после reload.
Что показать в ответе про риски
localStorage / memoryУдобно для SPA, но XSS может прочитать или использовать токен. In-memory хранение переживает XSS не лучше, зато теряется при перезагрузке. Для чувствительных данных сокращают TTL и усиливают защиту от XSS.
HttpOnly cookieТокен не читает JavaScript, но нужно думать про SameSite, CSRF и домены. Хорошо подходит для SSR и BFF.
PKCEКлиент не хранит secret. Нужно проверять state и корректно обрабатывать callback, иначе можно получить подмену flow.
roles / claimsФронтенд может скрыть пункт меню, но API обязан проверять право на сервере. Иначе прямой запрос обойдет интерфейс.
Refresh token и обработка 401
Частая ловушка на интервью: вы говорите "если пришел 401, обновляем токен", но не объясняете, что будет при нескольких параллельных запросах. В реальном интерфейсе после открытия страницы может одновременно уйти несколько запросов, и все они получат 401.
Плохой пример, так делать рискованно:
api.interceptors.response.use(undefined, async (error) => {
if (error.response?.status === 401) {
await refreshToken();
return api.request(error.config);
}
throw error;
});Что сломается: каждый запрос с 401 запустит свой refresh, токены могут перезаписаться в случайном порядке, а исходные запросы уйдут повторно несколько раз. В UI это выглядит как мигающий loading, внезапный logout или успешное действие, которое потом откатывается ошибкой.
Более безопасная идея: держать общий promise обновления, ждать его в остальных запросах, помечать исходный запрос как уже повторенный, отменять или не повторять запросы после logout и выходить в единое состояние unauthenticated, если refresh не прошел.
- 1Получить 401 на защищенный запрос
- 2Поставить остальные запросы в ожидание refresh
- 3Обновить токен один раз
- 4Повторить исходные запросы или разлогинить пользователя
- 1Запустить refresh на каждый 401
- 2Перезаписать токены в случайном порядке
- 3Получить циклические повторы запросов или дублирование действий
- 4Оставить пользователя в сломанном состоянии UI
OAuth, SSO и готовые провайдеры
Если вы говорите про OAuth, не сводите ответ к фразе "вошли через Google". Для фронтенда важны redirect, callback, state, обработка ошибок, состояние загрузки, возврат пользователя на исходную страницу и связь с бекенд-сессией.
Для SPA полезно упомянуть Authorization Code Flow with PKCE. Так вы показываете, что понимаете ограничение браузерного клиента: он публичный и не может безопасно хранить client_secret. Если проект использовал готовый SDK, скажите, какую часть делал SDK, а какую вы контролировали в приложении.
Практический вывод
На собеседовании не нужно называть максимальное число систем. Важнее показать зрелость: вы понимаете границы фронтенда, не выдаете UI за защиту API, знаете риски хранения токенов и умеете поддержать нормальный пользовательский flow.
Хорошая короткая версия ответа может звучать так:
Работал с JWT и cookie-based сессиями, также интегрировал OAuth-провайдера. На фронтенде отвечал за login flow, состояние пользователя, protected routes, refresh, logout и обработку 401/403. При выборе хранения токенов смотрю на риски XSS и CSRF, а проверку прав всегда оставляю на сервере. Если бы проектировал новый SPA-flow, рассматривал бы Authorization Code Flow with PKCE или BFF, в зависимости от требований безопасности.
Адаптируйте эту фразу под свой реальный опыт. Если чего-то не делали, не включайте это в ответ как факт.
Частые ошибки
Где обычно ошибаются
Проверьте формулировки, которые звучат уверенно, но на интервью быстро выдают пробелы.
- 1
Говорить списком технологий без роли фронтенда
Просто перечислитьJWT,OAuthи cookies недостаточно. Лучше сразу покажите, что именно вы делали: login flow, guards, refresh, logout, роли, обработку ошибок или интеграцию с провайдером. - 2
Путать аутентификацию и авторизацию
Если сказать, что login автоматически дает доступ ко всем данным, это звучит небезопасно. Правильнее разделить проверку личности и проверку прав, а также добавить, что сервер валидирует доступ к API. - 3
Называть localStorage безопасным хранилищем
localStorageдоступен любому скрипту на странице, поэтому XSS может украсть bearer token. Если вы использовали такой вариант, проговорите ограничения: короткий TTL, защита от XSS, CSP, санитизация и продуманный logout. - 4
Считать скрытый UI защитой доступа
Скрытая кнопка или route guard улучшает UX, но не защищает API. Пользователь может отправить запрос напрямую, поэтому права должны проверяться на бекенде, а фронтенд должен правильно обработать403. - 5
Не думать о гонках при refresh token
Когда несколько запросов одновременно получают401, наивный код может отправить несколько refresh-запросов и испортить состояние токенов. Лучше делать один refresh и ставить остальные запросы в очередь или ожидание.
Follow-up
Что могут спросить дальше
Короткие ответы на вопросы, которые проверяют ваш реальный опыт с авторизацией, токенами и правами доступа.
Живые ответы
Видео с похожим вопросом
Если найдем публичные интервью с таким вопросом, добавим их сюда. Их удобно смотреть после теории, чтобы свериться с живыми ответами.
Пока видео нет. Когда появятся подходящие публичные интервью, добавим их в этот блок, чтобы можно было сравнить разбор с тем, как отвечают реальные кандидаты.
Как правильно хранить токен во Frontend 😎
Токен лучше не держать в localStorage. На интервью важно объяснить риск XSS, роль HttpOnly cookie, CSRF-защиту и компромисс между cookies и хранением access token в памяти.
Что такое HTTPOnly cookie 😎
HTTPOnly cookie нельзя прочитать через JavaScript, поэтому ее часто используют для хранения сессионных идентификаторов и refresh-токенов. На странице разбираем, от чего этот флаг защищает, от чего не защищает и что важно сказать на интервью.