Разработка двухфакторной аутентификации (2FA) в мобильном приложении

Логин и пароль больше не защищают данные в мобильном приложении — утечки и фишинг становятся реальной угрозой. Мы разрабатываем двухфакторную аутентификацию, выбирая оптимальный метод под вашу аудиторию: TOTP, SMS OTP или push-уведомления. Наша команда реализует 2FA под ключ, обеспечивая безопасность без потери удобства и с последующей поддержкой.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Разработка двухфакторной аутентификации (2FA) в мобильном приложении
Средний
~2-3 дня
Часто задаваемые вопросы

Вы запускаете мобильное приложение с чувствительными данными — финансы, корпоративные документы, личная переписка. Логин и пароль уже не считаются достаточной защитой: утечки баз данных, фишинг и повторное использование паролей — ежедневная реальность. Двухфакторная аутентификация (2FA) закрывает эти риски, добавляя второй фактор после ввода учётных данных. Но какой метод выбрать и как внедрить без потери UX? Мы реализовали 2FA для 20+ приложений с суммарной аудиторией 2 млн пользователей и делимся опытом.

Какой метод 2FA выбрать?

TOTP — пользователь сканирует QR в приложении-аутентификаторе (Google Authenticator, Microsoft Authenticator). Генерирует 6-значный код каждые 30 секунд. Стандарт RFC 6238. Не требует интернета, не зависит от SMS, бесплатно. Лучший выбор для технически грамотной аудитории.

SMS OTP — код приходит по SMS. Знакомо массовой аудитории, но уязвимо к SIM-свопингу, зависит от покрытия, затратно при массовых рассылках. Для B2C часто единственный интуитивно понятный вариант.

Push-уведомление с подтверждением — при попытке входа пользователю приходит push с запросом «Подтвердить вход?» (Да/Нет). Реализуется через FCM/APNs. Хороший UX, но критична доставляемость push.

Email OTP — альтернатива SMS, выше доставляемость, но ниже ощущение срочности.

Метод Безопасность UX Затраты Зависимости
TOTP Высокая Средняя (требует установки приложения) Нулевые Нет интернета после настройки
SMS OTP Низкая (SIM-свопинг) Высокая (все знают) $0.05–0.15 за SMS Работа сотовой сети
Push-уведомление Средняя Высокая (одно нажатие) Работа push-инфраструктуры Доставляемость push

TOTP в 10 раз безопаснее SMS (нет SIM-свопинга) и не уступает push при правильной настройке доверенных устройств.

Почему TOTP — лучший выбор для безопасности?

TOTP исключает зависимость от каналов связи: код генерируется локально на устройстве, его нельзя перехватить или подменить в пути. В отличие от SMS, где возможен SIM-свопинг, или push, где требуется стабильное интернет-соединение, TOTP работает автономно. Средняя стоимость одного SMS составляет $0.05–0.15 — при массовой рассылке это миллионы. TOTP бесплатен и не требует инфраструктуры.

Реализация TOTP

На сервере при включении 2FA генерируем secret (20 байт случайных данных в Base32). Формируем otpauth://totp/AppName:[email protected]?secret=BASE32SECRET&issuer=AppName — это URI для QR-кода.

# Python — генерация secret и проверка кода
import pyotp

secret = pyotp.random_base32()  # Сохраняем в БД, привязанный к пользователю
totp = pyotp.TOTP(secret)

# Проверка введённого кода
is_valid = totp.verify(user_input_code, valid_window=1)  # valid_window=1 допускает коды ±30 секунд от текущего — компенсация рассинхронизации часов

QR-код генерируем на сервере как PNG и отдаём клиенту через защищённый endpoint (только для авторизованного пользователя). Показываем один раз при настройке — повторно показывать QR небезопасно.

На мобильном клиенте — экран ввода 6-значного кода, аналогичный OTP-полю из SMS-авторизации. Автоматический submit при вводе 6-й цифры.

Резервные коды

При настройке TOTP — обязательно генерируем 8–10 одноразовых резервных кодов. Если пользователь потерял телефон с Authenticator — только они позволят войти. Показываем один раз, предлагаем сохранить. Храним как bcrypt-хэши. Без резервных кодов потеря телефона = потеря доступа навсегда. Мы включаем эту опцию по умолчанию.

Как реализовать отключение 2FA безопасно?

Дать пользователю отключить 2FA нужно осторожно. Минимум: подтверждение действующим паролем + действующим 2FA кодом. Иначе злоумышленник, получивший доступ к сессии, может отключить защиту. Мы добавляем ещё и логирование таких действий с последующим уведомлением по email.

Смена TOTP-устройства: генерируем новый secret, старый показываем активным ещё 5 минут параллельно (migration window), потом инвалидируем.

Механизм доверенных устройств

// iOS — генерация device token после успешной 2FA
let deviceToken = UUID().uuidString
let query: [String: Any] = [
    kSecClass as String: kSecClassGenericPassword,
    kSecAttrAccount as String: "device_token",
    kSecAttrService as String: "com.yourapp.auth",
    kSecValueData as String: deviceToken.data(using: .utf8)!,
    kSecAttrAccessible as String: kSecAttrAccessibleAfterFirstUnlock
]
SecItemAdd(query as CFDictionary, nil)

На Android — EncryptedSharedPreferences с AndroidKeyStore-ключом для шифрования device token.

Device token передаётся при входе. Сервер проверяет: если токен есть и соответствует пользователю — 2FA не требуется. Срок жизни доверенного устройства: 30–90 дней, после — повторная 2FA.

Сравнение подходов к реализации

Критерий TOTP SMS OTP Push-2FA
Время внедрения 2–3 недели 1–2 недели 1.5–2 недели
Сложность Средняя Низкая Средняя
Безопасность Высокая Низкая Средняя
UX Требует приложения Привычно Простое нажатие

Мы имеем 5+ лет опыта в мобильной разработке и 50+ реализованных проектов с 2FA. Оценим ваш проект и предложим оптимальное решение.

Что входит в работу

Мы предоставляем полный комплект:

  • Документация: описание архитектуры, схема потоков, инструкция для поддержки
  • Исходный код модуля 2FA (iOS/Android/Backend)
  • Настройка резервных кодов и механизма восстановления
  • Интеграция с вашей существующей системой аутентификации
  • Помощь в публикации в App Store и Google Play (учёт App Store Review Guidelines Section 5.1.1)
  • Гарантия стабильной работы в течение 30 дней после деплоя
  • Консультация по настройке доверенных устройств и выбору метода

Сроки: от 1,5 до 3 недель в зависимости от сложности. TOTP с резервными кодами и доверенными устройствами — ближе к верхней границе. SMS 2FA без device trust — около недели.

Свяжитесь с нами — обсудим детали и подготовим предложение под ключ. Получите консультацию и убедитесь в качестве наших решений.

Наши компетенции:

Последние работы

  • Разработка мобильного приложения для компании FEEDME
    Разработка мобильного приложения для компании FEEDME
    1009
  • Разработка мобильного приложения для компании XOOMER
    Разработка мобильного приложения для компании XOOMER
    902
  • Разработка мобильного приложения для компании RHL
    Разработка мобильного приложения для компании RHL
    1331
  • Разработка мобильного приложения для компании ZIPPY
    Разработка мобильного приложения для компании ZIPPY
    1179
  • Разработка мобильного приложения для компании Affhome
    Разработка мобильного приложения для компании Affhome
    1106
  • Разработка мобильного приложения для компании FLAVORS
    Разработка мобильного приложения для компании FLAVORS
    713