Двухфакторная аутентификация: вход и восстановление доступа
Как спроектировать двухфакторную аутентификацию в сервисе: подключение, вход, резервные коды, смена устройства и проверка восстановления.
Автор: Александр Поркулевич, CEO и основатель, 404gen.
Двухфакторная аутентификация проверяет личность с помощью двух независимых факторов. Для собственного сервиса задача начинается с выбора способа подтверждения и заканчивается восстановлением доступа после потери устройства. Если проверить только красивый экран ввода кода, при запуске останутся обходные пути: старая сессия, мобильный клиент, технический аккаунт или сброс через поддержку.
Этот разбор предназначен владельцам SaaS, клиентских кабинетов и корпоративных приложений, которые заказывают доработку входа. Здесь нет инструкций по отключению защиты чужого аккаунта. Мы разбираем требования к вашему продукту: какие состояния показывать человеку, какие решения принимать на сервере и что воспроизвести на приёмке. Все примеры организаций и пользователей учебные.
Какую задачу решает двухфакторная аутентификация
Начните с перечня действий, последствия которых для вашей компании существенны. Одному пользователю доступен просмотр расписания, другому изменение платёжных реквизитов, третьему управление сотрудниками клиента. Одинаковый интерфейс входа не означает одинаковый риск. До разработки зафиксируйте, кому обязателен второй фактор, какие действия требуют повторного подтверждения и кто вправе менять эту политику.
Для B2B-продукта полезно отдельно описать администратора вашей площадки и администратора организации клиента. Первый обслуживает сервис, второй распоряжается людьми и данными внутри своего пространства. Эти роли нельзя смешивать общей кнопкой «Отключить защиту». Сотрудник поддержки также не должен автоматически получать возможность входить от имени клиента, если это не предусмотрено отдельной контролируемой процедурой.
В рекомендациях OWASP по MFA факторы разделены на знание, владение и биометрические признаки. Два секрета одного типа сами по себе не образуют независимые факторы. Для обсуждения с подрядчиком это означает простой вопрос: что именно доказывает каждое подтверждение и может ли одна утечка скомпрометировать оба?
Сначала найдите все способы войти
Составьте карту входов: браузерная форма, мобильное приложение, SSO, приглашение нового сотрудника, восстановление пароля и служебный интерфейс. Рядом укажите, какой сервер выдаёт сессию и где проверяются условия доступа. Иногда новая проверка появляется только в веб-форме, а старая версия мобильного клиента продолжает получать полноценную сессию после одного пароля. С точки зрения продукта защита тогда включена лишь на части маршрутов.
В карте должны быть и машинные обращения. Ключ интеграции не вводит код из приложения-аутентификатора, поэтому для него нужен собственный порядок выдачи, ограничения и отзыва. Не превращайте техническую учётную запись в бессрочное исключение для человека. У каждой такой записи должен быть понятный владелец, назначение и способ прекращения доступа при смене подрядчика.
Попросите команду показать последовательность на схеме: идентификация пользователя, проверка первого фактора, ограниченное состояние ожидания, второй фактор, создание рабочей сессии. До завершения подтверждения нельзя выдавать права полноценного входа и рассчитывать, что интерфейс сам скроет опасные действия. На приёмке эту границу проверяют отдельным запросом к защищённой операции.
Как выбрать способ подтверждения
Обсудите реальные устройства и условия работы людей. У сотрудников склада могут быть общие рабочие терминалы, у дилеров личные телефоны, у администратора инфраструктуры аппаратный ключ. Метод выбирают по модели угроз и возможности сопровождения. Решение, которое удобно небольшой знакомой команде, может не подойти публичному сервису с самостоятельной регистрацией и удалённой поддержкой.
Коды из приложения-аутентификатора требуют процедуры подключения и переноса на новое устройство. Сообщения зависят от внешнего канала доставки и доступа к номеру. Аппаратные ключи требуют учёта и запасного способа подтверждения. В сравнении вариантов запишите не только основной вход, но и выдачу, потерю, замену, отзыв и помощь пользователю. Так обсуждение переходит от названия технологии к полной стоимости эксплуатации.
MDN описывает Web Authentication API как механизм работы с учётными данными на основе открытого ключа. Это самостоятельное направление проектирования, а не новое оформление поля для одноразового кода. Если команда предлагает passkey или аппаратный аутентификатор, попросите показать поддерживаемые устройства, регистрацию дополнительного средства и сценарий потери основного.
| Что сравнить | Что запросить у команды |
|---|---|
| Повседневный вход | Маршрут на реальном устройстве целевой аудитории |
| Подключение | Проверку владения до включения фактора |
| Потеря устройства | Контролируемый путь восстановления |
| Работа поддержки | Права оператора и запись основания решения |
Подключение: настройка ещё не означает включение
У подключения должен быть явный конец. В учебном сервисе пользователь открывает настройки, повторно подтверждает доступ, регистрирует средство и выполняет пробное подтверждение. Только после этого состояние меняется на «Подключено». Просмотр QR-кода или нажатие «Продолжить» сами по себе не доказывают, что человек завершил настройку и сможет войти в следующий раз.
Проверьте, что произойдёт, если вкладка закрыта посередине. Незавершённая регистрация не должна превращаться в работающий фактор, а повторное открытие не должно оставлять несколько неразличимых черновиков. Интерфейс сообщает текущее состояние и следующий шаг. На сервере также различаются подготовка, подтверждённая регистрация и отозванное средство. Секреты подключения не попадают в обычные журналы и аналитические события.
Если политика организации требует обязательного подключения, предусмотрите переходный период с согласованными условиями. Пользователь должен понимать, почему доступ ограничен и как его завершить. Администратор видит готовность сотрудников без доступа к их секретам. Массовое включение лучше сначала проверить на небольшой группе с разными устройствами, чтобы не превратить выпуск в массовую блокировку рабочих мест.
Экран подтверждения должен объяснять состояние
После первого фактора покажите, что требуется сейчас: код, касание ключа или подтверждение на устройстве. Отдельно укажите доступный альтернативный способ, если он предусмотрен. Не заставляйте человека гадать, отправлено ли сообщение и можно ли запросить его повторно. Сообщение об ошибке должно помогать продолжить, при этом не раскрывать постороннему лишние сведения об аккаунте.
Ввод кода проверяют с вставкой из буфера, клавиатурой и экранным диктором. Несколько визуальных ячеек могут выглядеть красиво, но важно сохранить понятное поле и предсказуемый фокус. Состояние ожидания не должно перемещать кнопку или стирать введённое до ответа. Если попытка завершилась ошибкой сети, нельзя уверенно заявлять, что код неверен: причина ещё не установлена.
Разведите срок действия подтверждения и срок жизни всей попытки входа. После слишком долгого перерыва человеку может потребоваться начать заново. Названия и значения выбирает команда по требованиям безопасности, а интерфейс объясняет последствие. Не привязывайте бизнес-правило к таймеру в браузере: часы устройства могут отличаться, вкладка может находиться в фоне, а проверка всё равно остаётся серверной.
Ошибки, повторные попытки и защита от перебора
Для каждого ответа сервера задайте действие интерфейса. Неверное подтверждение позволяет исправить ввод в пределах политики попыток; истёкшая операция требует нового маршрута; временная недоступность канала предлагает подождать или выбрать разрешённую альтернативу. Одинаковая красная надпись «Что-то пошло не так» не даёт человеку понять, потерян ли результат и стоит ли повторять действие.
Ограничения запросов нужны на сервере и должны учитывать разные маршруты: ввод подтверждения, повторную отправку и восстановление. Наличие задержки на кнопке не защищает API от прямых запросов. Попросите разработчика описать, как ограничивается частота и как пользователь выходит из временной блокировки. Слишком общая блокировка может затронуть людей за общим корпоративным адресом сети.
Не делайте автоматический переход к слабому запасному варианту после нескольких неудач. Иначе злоумышленнику достаточно вызвать ошибки, чтобы получить более простой маршрут. Альтернативные способы заранее входят в политику аккаунта и проверяются на равных основаниях. Сигнал о необычной активности должен приводить к понятной реакции сервиса, а не к бесконечным уведомлениям, которые люди привыкают подтверждать не читая.
Восстановление доступа проектируют до запуска
Разберите три разные ситуации: человек забыл пароль, потерял второй фактор или больше не имеет доступа ни к одному зарегистрированному средству. У них разные основания восстановления. Общая ссылка «Забыли пароль?» не должна незаметно отключать второй фактор. Для каждого пути запишите, чем подтверждается личность, какое состояние меняется и какие прежние средства перестают работать.
OWASP отдельно описывает восстановление пароля, включая одноразовость и ограниченный срок действия средств восстановления. В вашем продукте эти правила следует согласовать с MFA: успешная смена пароля не обязана автоматически означать успешное подтверждение второго фактора. Это две разные части политики доступа, и их связь нужно явно проверить.
Если восстановление проходит через поддержку, подготовьте рабочее место оператора. Там должны быть запрос, допустимые доказательства, основание решения и история действий. Оператору не нужны пароль, текущий одноразовый код или полный набор резервных кодов пользователя. Сценарий «напишите знакомому менеджеру, он отключит защиту» неудобен для аудита и плохо переносится на рост команды.
В учебном концепте «Ключ» отдельно показаны подключение, проверка и запрос восстановления. Это авторский интерфейс с вымышленными данными, а не действующая система аутентификации. Он помогает согласовать состояния и вопросы к реализации; криптографические свойства и серверные ограничения проверяются в отдельном техническом контуре.
Резервные коды и смена устройства
Резервный код нужно рассматривать как полноценное средство доступа. После выдачи человеку объясняют, где его безопасно хранить и когда применять. В интерфейсе можно показать число оставшихся кодов, но нельзя повторно раскрывать секреты сотруднику поддержки или включать их в обычный экспорт аккаунта. Повторное использование уже потраченного кода должно быть отдельным негативным тестом.
Проверьте перевыпуск набора. Пользователь должен понимать, что происходит с прежними кодами, и получить подтверждение изменения без раскрытия новых секретов в письме или чате. Если операция прервана, продукт не должен создавать неопределённость: какой набор действителен и где это проверить. Конкретную последовательность подтверждения и сохранения фиксируют в техническом задании.
Смена телефона не всегда означает потерю доступа. Пока старое средство работает, можно предусмотреть управляемое добавление нового, пробную проверку и отзыв старого. Запретить всё и отправить пользователя в поддержку часто дороже, чем спроектировать безопасный самостоятельный маршрут. На приёмке проверьте оба пути: плановую замену с действующим устройством и восстановление после полной потери.
Сессии и доверенные устройства
После успешного подтверждения пользователь получает рабочую сессию. Дальше возникают отдельные вопросы: какие действия требуют повторной проверки, как долго действует доверие к устройству и что происходит после смены средства защиты. Не задавайте эти правила случайно в разных частях приложения. Для одной учётной записи должна быть согласованная модель, понятная всем клиентам продукта.
Список активных устройств полезен, если он помогает принять решение: понятное имя, время последней активности, приблизительный контекст и кнопка прекращения сессии. Не выдавайте технический набор идентификаторов за удобный контроль. В то же время подпись браузера не доказывает личность владельца устройства. Интерфейс показывает наблюдаемые данные и объясняет действие отзыва без ложной уверенности.
Проверьте выход со всех устройств после восстановления, отзыв доступа у уволенного сотрудника и повторный запрос к API из старой вкладки. Визуально закрытая страница не означает, что сервер перестал принимать старую сессию. Тест должен затрагивать защищённую операцию после изменения политики. Смежную модель разрешений разбираем в статье про роли и права в личном кабинете.
Как связать второй фактор с корпоративным SSO
Если часть клиентов входит через корпоративного поставщика идентификации, определите, кто отвечает за дополнительное подтверждение. Возможно, организация уже применяет собственную политику MFA. Ваш сервис должен корректно обрабатывать согласованные признаки входа и ограничения, а не добавлять вторую независимую регистрацию без причины. Решение зависит от протокола и договора интеграции, его нельзя принять по одному значку SSO.
Отдельно проверьте аккаунт, который допускает одновременно SSO и локальный пароль. Запасной локальный маршрут может обходить корпоративное правило, если его не включить в общую модель. Такое исключение иногда нужно для аварийного доступа, но оно должно быть ограничено, контролируемо и известно ответственным. Назначение «аварийного администратора» не отменяет требования к хранению и проверке его средств доступа.
При передаче проекта оставьте карту источников идентификации и владельцев настроек. Клиент должен понимать, где менять политику, кого затронет изменение и как проверить результат на тестовом пользователе. Общие вопросы связки с корпоративными приложениями описаны в материале про единый вход SSO; текущая статья сосредоточена на втором факторе и его жизненном цикле.
Какие события нужны для разбора проблемы
В журнале полезны начало подключения, завершение регистрации, успешное подтверждение, отказ, изменение средства и восстановление. Запись связывается с операцией и аккаунтом, но не содержит секрет подтверждения. Одинаковый идентификатор операции позволяет сопоставить экран пользователя и серверный результат, не пересылая снимки с конфиденциальными данными по нескольким чатам.
Для поддержки заранее подготовьте безопасную карточку диагностики. Она отвечает на вопрос «на каком шаге остановился человек», а не показывает содержимое его средств доступа. Например, видно, что регистрация начата, но пробная проверка не завершена. Это помогает отличить неполную настройку от сбоя доставки и не советовать пользователю переустановку всего подряд.
Метрики запуска должны описывать реальные переходы: начатые и завершённые подключения, входы, запросы восстановления, обращения в поддержку. Рост числа включений сам по себе не доказывает безопасность. При оценке удобства важно видеть долю людей, которые завершили нужный маршрут, и причины отказа. Исходные значения и целевые пороги определяют по вашему продукту, а не заимствуют из чужой презентации.
Как принять работу подрядчика
Приёмку удобнее организовать как набор воспроизводимых историй. Для каждой укажите исходное состояние, роль, устройство, действие, ответ сервера и состояние после перезагрузки. Исполнитель показывает не только экран успеха, но и сохранённую запись операции. Это особенно важно для прерывания настройки, смены устройства и восстановления, где визуальная последовательность может скрывать неверное серверное состояние.
- Незавершённая регистрация не включает фактор после закрытия вкладки.
- Защищённая операция недоступна после первого фактора без второго.
- Истёкшее или уже использованное подтверждение не даёт доступ повторно.
- Смена пароля следует согласованной политике MFA и сессий.
- Отозванное устройство не продолжает выполнять защищённые действия.
- Поддержка видит основание восстановления, но не секреты пользователя.
Проверяйте одинаковые истории в браузере и мобильном приложении, если оба входят в состав продукта. Не ограничивайтесь текущей сборкой клиента: сервер должен корректно обрабатывать старую версию в рамках согласованной совместимости. Если старый клиент больше не поддерживается, человек получает объяснимый путь обновления, а не бесконечный запрос кода без возможности завершить вход.
Технический отчёт должен содержать ограничения проверки. Демонстрационный прототип подтверждает структуру экранов; интеграционное окружение показывает поведение связки компонентов; проверка безопасности требует отдельного согласованного объёма. Не объединяйте эти уровни словом «готово». Для заказа работ достаточно перечислить требуемые свойства и доказательства, которые команда передаст на каждом этапе.
Выпуск и сопровождение без массовой блокировки
План выпуска включает пилотную группу, сообщения пользователям, подготовку поддержки и порядок реакции на сбой. До переключения проверьте, что выбранные каналы подтверждения доступны аудитории, а инструкции соответствуют актуальному интерфейсу. Нельзя считать сообщение отправленным доказательством того, что каждый сотрудник прочитал его и подключил средство доступа.
Отдельно согласуйте восстановление работоспособности самого сервиса. Возврат старой версии приложения не должен разрушать уже зарегистрированные средства и случайно открывать обходной вход. Совместимость изменений базы, политики и клиентов проверяют до production. Если временно требуется особый режим, у него должны быть владелец, срок, ограничения и запись причины, а не забытый переключатель в конфигурации.
Для разработки и развития веб-приложения подготовьте список входов, группы пользователей, требования к критическим действиям и текущие обращения по доступу. Команда сможет оценить объём: интерфейсы, серверную политику, интеграции, тесты и поддержку выпуска. Стоимость определяется после изучения существующей системы; универсальный срок подключения второго фактора не описывает сложность вашего продукта.
Частые вопросы
Чем аутентификация отличается от авторизации?
Аутентификация подтверждает, кто обращается к системе. Авторизация определяет, какие действия ему разрешены. Второй фактор усиливает проверку личности, но сам по себе не исправляет ошибку прав доступа. Пользователь с успешно подтверждённым входом всё равно должен получать только данные и операции своей роли и организации.
Можно ли просто добавить поле с кодом?
Поле решает только часть интерфейсной задачи. Нужны серверная проверка, состояние незавершённого входа, ограничения попыток, подключение и отзыв средства, восстановление и политика сессий. Состав зависит от продукта. На приёмке следует проверить защищённую операцию напрямую, чтобы убедиться, что экран нельзя обойти старым клиентом или альтернативным входом.
Всегда ли SMS подходит как второй фактор?
Подходящий метод выбирают по модели угроз, устройствам и условиям аудитории. SMS зависит от доступности номера и канала доставки, поэтому его ограничения обсуждают отдельно. Сравнивайте полный жизненный цикл каждого метода, включая потерю средства и работу поддержки. Наличие SMS-поля не является универсальным доказательством достаточной защиты.
Что делать пользователю при потере телефона?
В собственном продукте для этого заранее проектируют разрешённый путь: другое зарегистрированное средство, одноразовый резервный код или проверку через поддержку. Конкретный порядок зависит от политики сервиса. Поддержке нужны основание и история решения; она не должна просить пользователя прислать пароль или действующий код подтверждения в обычный чат.
Доказывает ли макет готовность защиты?
Макет помогает проверить понятность шагов и состояний. Он не доказывает серверные ограничения, хранение секретов, корректность криптографии и отзыв сессий. Для этих свойств нужны техническая реализация и согласованные проверки. В материалах проекта следует отдельно обозначать интерфейсный прототип, интеграционные испытания и объём проверки безопасности.
С чего начать заказ доработки?
Соберите способы входа, роли пользователей, перечень критических действий и примеры проблем с восстановлением. Укажите используемый SSO, мобильные клиенты и ограничения устройств. На этой основе подрядчик предложит политику, сценарии и план проверки. Начальная задача состоит в согласовании поведения продукта, а затем уже в выборе конкретной библиотеки и внешнего поставщика.
Источники и границы разбора
Проверено 18 октября 2026 года. OWASP используется для определения независимых факторов и требований к восстановлению; MDN для описания WebAuthn. Предложенные карточки приёмки, последовательность выпуска и учебные ситуации являются рекомендациями по проектированию, а не цитатами из стандартов. Материал не заменяет проверку безопасности конкретной системы.
404gen — креативное digital-агентство полного цикла, работаем удалённо по всей России.
Телефон: +7 993 729-59-59 (пн–пт, 10:00–19:00 МСК). WhatsApp: +7 913 141-20-96. Telegram: @aporkulevich. Почта: ap@404gen.ru.