Как понять, что первый шаг двухфакторной аутентификации прошел успешно?
DOM и браузер
Успех первого шага 2FA (проверка логина/пароля) подтверждают промежуточным состоянием: сервер возвращает временный токен/флаг «нужен второй фактор», не выдавая полноценную сессию до второго шага.
Двухшаговый процесс 2FA
Шаг 1 — логин/пароль
POST /auth/login { email, password }
→ пароль верный, но НЕ полный доступ
→ вернуть: { requires2FA: true, tempToken: '...' }Сервер проверяет пароль. Если верно — не выдаёт полную сессию, а сигнализирует, что нужен второй фактор.
Шаг 2 — второй фактор
POST /auth/2fa/verify { tempToken, code: '123456' }
→ код верный → полноценные токены (access + refresh)Как подтверждается успех первого шага
- Промежуточный/временный токен (короткоживущий) — доказывает, что первый шаг пройден, нужен для второго шага.
- Флаг в ответе (
requires2FA: true) — фронт понимает, что показать ввод кода. - Полноценный access token не выдаётся до второго шага.
const res = await login(email, password);
if (res.requires2FA) {
// первый шаг успешен → показать форму ввода кода
show2FAInput(res.tempToken);
}Безопасность
- Временный токен — короткий срок, только для завершения 2FA.
- Не давать полный доступ до второго фактора.
- Ограничить попытки ввода кода (rate limit).
Типы второго фактора
TOTP (Google Authenticator), SMS/email код, push, аппаратный ключ (WebAuthn).
Коротко для собеседования
Успех первого шага 2FA (пароль верен) подтверждают промежуточным состоянием: сервер возвращает флаг requires2FA и короткоживущий временный токен, но НЕ полную сессию. Фронт показывает ввод второго фактора; полноценные токены выдаются только после верного кода на втором шаге. Временный токен ограничен по времени и попыткам.