Двухфакторная аутентификация — это реализация механизма TOTP (Time-based One-Time Password, RFC 6238). По сути, сервер и клиент договариваются об общем секрете и генерируют коды на основе текущего времени. Даже если злоумышленник получит пароль, без TOTP-кода он не пройдёт.
Шаг 1. Зайдите в настройки безопасности
Логинитесь в веб-интерфейс почты (API-методы для включения 2FA обычно заблокированы). Найдите секцию "Security" или "Two-factor authentication". Эндпоинт типа /settings/security/2fa/enable.
Шаг 2. Инициализация
Сервер генерирует секретный ключ (base32 encoded, обычно 16-32 символов) и отдаёт его в виде QR-кода. По сути, это строка формата:
Секрет хранится у сервера в БД, привязанный к вашему аккаунту. Без него генерация кодов невозможна.
Шаг 3. Клиентская часть
Установите любой аутентификатор (Google Authenticator, Aegis, 2FAS). Это просто реализация TOTP-алгоритма:
Отсканируйте QR-код или вставьте секрет вручную. Приложение сохранит секрет локально и начнёт генерировать 6-значные коды.
Шаг 4. Верификация
Сервер просит ввести текущий код. Вы берёте его из приложения, отправляете на бэкенд. Сервер вычисляет ожидаемый код по тому же алгоритму. Если совпало — подтверждает включение 2FA и сохраняет флаг в БД.
После этого сервер генерирует резервные коды (обычно 8-10 штук). Это одноразовые токены, которые хешируются и хранятся в БД как fallback-механизм на случай потери доступа к TOTP-приложению.
Шаг 5. Последствия
С этого момента при логине workflow меняется:
Важные нюансы для интеграции
Почтовые клиенты (SMTP/IMAP)
Твой обычный пароль перестаёт работать, потому что протоколы SMTP/IMAP не поддерживают TOTP. Решение: генеришь App Password — отдельный токен с ограниченными правами. Сервер создаёт случайную строку, сохраняет её хеш в БД, помечает как app_password для IMAP/SMTP.
Утеря телефона
Резервные коды — твои спасательные круги. Если потерял и коды, и доступ к TOTP — считай, аккаунт похоронил. Восстановление через саппорт возможно, но геморройно.
На каких провайдерах работает
Все крупные почтовики поддерживают TOTP: Gmail (на базе Google Identity), Yandex, Mail.ru, Outlook (Microsoft Entra ID), ProtonMail. Обычно можно ещё U2F/WebAuthn подключить, но это уже другая история.
Итог
2FA превращает твой аккаунт из однофакторной схемы в двухфакторную: something you know (пароль) + something you have (устройство с секретом). Взломать можно только если украдут оба фактора. Математически TOTP взломать нельзя — только брутфорс с перебором 10^6 комбинаций, но сервер банит после нескольких неудач.
Шаг 1. Зайдите в настройки безопасности
Логинитесь в веб-интерфейс почты (API-методы для включения 2FA обычно заблокированы). Найдите секцию "Security" или "Two-factor authentication". Эндпоинт типа /settings/security/2fa/enable.
Шаг 2. Инициализация
Сервер генерирует секретный ключ (base32 encoded, обычно 16-32 символов) и отдаёт его в виде QR-кода. По сути, это строка формата:
Код:
otpauth://totp/Provider:username?secret=JBSWY3DPEHPK3PXP&issuer=Provider
Секрет хранится у сервера в БД, привязанный к вашему аккаунту. Без него генерация кодов невозможна.
Шаг 3. Клиентская часть
Установите любой аутентификатор (Google Authenticator, Aegis, 2FAS). Это просто реализация TOTP-алгоритма:
Код:
TOTP(K) = truncate(HMAC-SHA1(K, floor(time/30)))
Где K — общий секрет, time — Unix timestamp. Код меняется каждые 30 секунд.
Отсканируйте QR-код или вставьте секрет вручную. Приложение сохранит секрет локально и начнёт генерировать 6-значные коды.
Шаг 4. Верификация
Сервер просит ввести текущий код. Вы берёте его из приложения, отправляете на бэкенд. Сервер вычисляет ожидаемый код по тому же алгоритму. Если совпало — подтверждает включение 2FA и сохраняет флаг в БД.
После этого сервер генерирует резервные коды (обычно 8-10 штук). Это одноразовые токены, которые хешируются и хранятся в БД как fallback-механизм на случай потери доступа к TOTP-приложению.
Шаг 5. Последствия
С этого момента при логине workflow меняется:
Код:
1. POST /auth/login { username, password }
2. Сервер валидирует пароль. Если 2FA включена — возвращает 401 с header X-Require-2FA.
3. POST /auth/verify-2fa { username, totp_code или backup_code }
4. Сервер проверяет код, выдаёт access_token.
Почтовые клиенты (SMTP/IMAP)
Твой обычный пароль перестаёт работать, потому что протоколы SMTP/IMAP не поддерживают TOTP. Решение: генеришь App Password — отдельный токен с ограниченными правами. Сервер создаёт случайную строку, сохраняет её хеш в БД, помечает как app_password для IMAP/SMTP.
Утеря телефона
Резервные коды — твои спасательные круги. Если потерял и коды, и доступ к TOTP — считай, аккаунт похоронил. Восстановление через саппорт возможно, но геморройно.
На каких провайдерах работает
Все крупные почтовики поддерживают TOTP: Gmail (на базе Google Identity), Yandex, Mail.ru, Outlook (Microsoft Entra ID), ProtonMail. Обычно можно ещё U2F/WebAuthn подключить, но это уже другая история.
Итог
2FA превращает твой аккаунт из однофакторной схемы в двухфакторную: something you know (пароль) + something you have (устройство с секретом). Взломать можно только если украдут оба фактора. Математически TOTP взломать нельзя — только брутфорс с перебором 10^6 комбинаций, но сервер банит после нескольких неудач.