PassFront
  1. PassFront
  2. База знаний
  3. DOM и браузер

Как понять, что первый шаг двухфакторной аутентификации прошел успешно?

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 и короткоживущий временный токен, но НЕ полную сессию. Фронт показывает ввод второго фактора; полноценные токены выдаются только после верного кода на втором шаге. Временный токен ограничен по времени и попыткам.

Другие вопросы раздела