Интервью-вопрос
Что такое аутентификация
Аутентификация подтверждает, кто пользователь. Для frontend-разработчика важно не путать ее с авторизацией и понимать риски токенов, cookies, XSS, CSRF и истечения сессии.
- Добавлен
- Редакция
Подготовьте короткий ответ и пару деталей на случай уточняющих вопросов.
Мини-квиз
Проверка перед разбором
Несколько быстрых вопросов перед разбором. Так проще поймать места, которые только кажутся понятными.
Вопрос 1 из 50 правильно
Разбор
Разобраться, а не зазубрить
Дальше разбираем суть, типичные уточнения и места, где легко сказать лишнее или перепутать термины.
Базовая идея
Аутентификация нужна, чтобы система поняла, кто делает запрос. Это может быть человек, сервис, устройство или другое приложение. В обычном веб-приложении пользователь доказывает личность через пароль, одноразовый код, passkey, корпоративный SSO или внешний identity provider.
На интервью удобно отвечать в два шага. Сначала дайте определение. Потом сразу отделите его от авторизации. Если сказать только, что это вход в систему, ответ будет слишком бытовым. Лучше добавить, что после входа еще нужно отдельно проверить права на конкретное действие.
Что важно сказать как frontend-разработчику
Frontend не должен быть источником истины для безопасности. Он показывает состояние входа, скрывает недоступные элементы, отправляет запросы с cookie или token и обрабатывает ошибки. Но решение, можно ли читать эти данные или можно ли удалить этот объект, принимает сервер.
Хорошая короткая формулировка:
Аутентификация подтверждает личность пользователя, например через пароль, MFA или провайдера. После нее приложение получает сессию или токен, а авторизация уже определяет доступы. На фронтенде я слежу, чтобы credentials передавались безопасно, не доверяю только UI-проверкам и корректно обрабатываю истечение сессии.
Типичный flow в приложении
- 1Отправить credentials только по HTTPS
- 2Получить сессию или токен по контракту backend
- 3Запрашивать профиль через защищенный endpoint
- 4Обрабатывать 401 и истечение сессии
- 5При logout очищать клиентское состояние
- 1Считать пользователя вошедшим только по флагу в localStorage
- 2Хранить долгоживущий token без плана отзыва
- 3Декодировать JWT на клиенте и доверять ролям из него
- 4Игнорировать 401 и показывать устаревший UI
- 5Запускать несколько login-запросов двойным кликом без блокировки формы
- 6Оставлять пользовательские данные после выхода
Этот flow важен, потому что ошибки в аутентификации часто проявляются не при первом входе, а позже. Например, пользователь оставил вкладку открытой на ночь, access token истек, приложение продолжает показывать приватные данные из кеша и все запросы падают с 401. Если вы упоминаете такие сценарии, ответ звучит практичнее.
Пример frontend-кода
Пример ниже не показывает всю production-схему. Он показывает важную мысль: после логина фронтенд не должен сам назначать роль или считать JWT окончательной проверкой прав. Он отправляет данные на сервер, затем запрашивает профиль и обрабатывает отказ.
async function login(email: string, password: string, signal?: AbortSignal) {
const response = await fetch("/api/login", {
method: "POST",
headers: { "Content-Type": "application/json" },
credentials: "include",
signal,
body: JSON.stringify({ email, password }),
});
if (!response.ok) {
throw new Error("Не удалось войти");
}
const profileResponse = await fetch("/api/me", {
credentials: "include",
signal,
});
if (profileResponse.status === 401) {
throw new Error("Сессия не активна");
}
if (!profileResponse.ok) {
throw new Error("Не удалось получить профиль");
}
return profileResponse.json();
}Здесь credentials: "include" нужен, если backend использует cookie-сессию или cookie с токеном. Если проект использует bearer token, контракт будет другим. В любом случае проверка личности и прав остается на backend, а frontend должен корректно реагировать на статусы и не хранить лишние секреты.
В React такой вызов обычно оборачивают в состояние формы: отключают кнопку на время запроса, показывают ошибку рядом с полями и отменяют устаревший запрос через AbortController при уходе со страницы. Иначе возможны лишние login-запросы, race condition между старым и новым ответом или обновление состояния уже размонтированного компонента.
JWT, cookies и сессии без мифов
JWT - это формат токена, а не автоматическая безопасность. Его можно подписать, ограничить по времени, проверить по issuer и audience, но при утечке он все равно может дать доступ до истечения срока. Поэтому важно говорить про короткий срок жизни, refresh-механику, logout и отзыв, если он нужен продукту.
Cookie-сессия тоже не идеальна сама по себе. httpOnly cookie защищает от чтения токена через JavaScript, но браузер будет отправлять cookie автоматически. Поэтому нужно учитывать CSRF, SameSite, Secure и доменную модель. Сильный ответ не спорит cookie против JWT абстрактно, а объясняет условия выбора.
OAuth и OpenID Connect
Если вас спрашивают про вход через Google, GitHub или корпоративный SSO, не стоит говорить, что OAuth равен аутентификации. OAuth 2.0 в первую очередь описывает делегирование доступа к ресурсам. OpenID Connect добавляет слой identity поверх OAuth 2.0 и дает стандартный способ получить информацию о пользователе.
Практический ответ может быть таким: для login через провайдера обычно используют OpenID Connect. OAuth помогает выдать доступ, а OIDC позволяет приложению понять, кто пользователь. Это коротко и показывает, что вы не смешиваете протоколы.
Практический вывод
На интервью вам не нужно проектировать всю identity platform. Достаточно показать границы ответственности. Backend проверяет credentials, выдает сессию или токены, проверяет доступ на API. Frontend отправляет запросы по контракту, не хранит секреты без необходимости, защищается от типичных browser-угроз и держит понятный UX при ошибках.
Если хотите усилить ответ, добавьте пример риска. Например: если хранить долгоживущий access token в localStorage, XSS может его украсть. Если полагаться только на скрытие кнопки, пользователь сможет дернуть API напрямую. Поэтому разделяйте UX-ограничения на клиенте и настоящие проверки на сервере.
Частые ошибки
Где обычно ошибаются
Проверьте формулировки, которые звучат уверенно, но на интервью быстро выдают пробелы.
- 1
Путать вход и права
Аутентификация подтверждает личность, а авторизация проверяет доступ. Если сказать, что логин сам по себе дает права, вас легко поймать примером с обычным пользователем и админской страницей. Лучше разделить эти шаги и добавить, что сервер проверяет оба аспекта. - 2
Доверять только frontend-проверкам
Скрытая кнопка не защищает API. Пользователь может отправить запрос вручную, поэтому backend должен проверять сессию и права на каждом защищенном endpoint. Фронтенд отвечает за UX, но не является источником безопасности. - 3
Хранить токен без оценки угроз
localStorageудобен, но доступен JavaScript-коду страницы, поэтому XSS может украсть токен.httpOnlycookie снижает риск кражи через JS, но требует думать о CSRF и настройкахSameSite. На интервью лучше говорить не про идеальное место, а про угрозы и trade-off. - 4
Считать JWT сессией без ограничений
JWT часто сложно отозвать до истечения срока жизни, если нет server-side списка отзыва или короткого access token с refresh-механизмом. Долгоживущий токен повышает ущерб при утечке. Безопаснее упомянуть короткий срок жизни, подпись, проверку issuer и audience. - 5
Не обрабатывать истечение сессии
Если приложение игнорирует401, пользователь видит сломанный интерфейс, бесконечные спиннеры или устаревшие данные. Нужен понятный сценарий: остановить повтор, попробовать refresh один раз, очистить состояние и показать путь к повторному входу. - 6
Забывать про состояние формы входа
Двойной клик по кнопке входа может отправить два запроса и создать гонку. Один запрос уже упал, другой еще идет, а UI показывает неверную ошибку или прежний профиль. Безопаснее блокировать submit на время запроса, показыватьloading, выводить понятную ошибку и не обновлять состояние после ухода со страницы.
Follow-up
Что могут спросить дальше
Короткие ответы на вопросы, которыми проверяют понимание аутентификации, токенов и границ frontend-ответственности.
Живые ответы
Видео с похожим вопросом
Если найдем публичные интервью с таким вопросом, добавим их сюда. Их удобно смотреть после теории, чтобы свериться с живыми ответами.
Пока видео нет. Когда появятся подходящие публичные интервью, добавим их в этот блок, чтобы можно было сравнить разбор с тем, как отвечают реальные кандидаты.
Что такое JWT-токен 😎
JWT это компактный подписанный токен с claims, который часто используют для передачи данных об аутентификации и правах доступа. Вы разберете структуру JWT, поймете, что подпись реально защищает, где хранить токен на фронтенде и какие риски важно назвать на интервью.
В чем разница между аутентификацией и авторизацией 😎
Аутентификация подтверждает личность пользователя, а авторизация проверяет его права на действие или ресурс. Разбираем, как ответить на интервью и какие ошибки во фронтенде приводят к утечкам доступа.