Перенос 2FA требует сохранить не только записи пользователей, но и ключ шифрования, алгоритм хранения, параметры TOTP и синхронизацию времени.
Ниже — практический порядок проверки. Он помогает сначала локализовать источник сбоя, затем внести минимальное изменение и проверить результат на реальном сценарии.
Как проявляется проблема
После миграции корректные коды Authenticator отклоняются, часть пользователей входит, а часть получает ошибку. Иногда секреты читаются, но расшифровываются другим ключом.
Что проверить в первую очередь
- Зафиксируйте точное время ошибки, пользователя, объект или операцию, на которой она появилась.
- Сравните успешный и проблемный сценарии: входные данные, права, окружение, версию приложения и последовательность действий.
- Проверьте последние изменения в коде, настройках, интеграциях, инфраструктуре и фоновых заданиях.
- Сохраните связанные логи и идентификаторы запроса до повторного запуска или очистки кеша.
Основные причины
Один и тот же внешний симптом может возникать на разных уровнях. Поэтому полезно проверять не только интерфейс, но и данные, права доступа, очередь событий и состояние внешнего сервиса.
- На новый сервер не перенесен master key или изменился формат его загрузки.
- При дампе или импорте повреждены бинарные либо зашифрованные поля.
- Серверы расходятся по времени, шагу TOTP или часовому окну.
- Новая версия приложения использует другой алгоритм шифрования или кодировку Base32.
Пошаговая диагностика
- Сравните хеши зашифрованных значений до и после переноса без вывода самих секретов.
- Проверьте NTP, UTC-время и допустимое окно TOTP на обоих серверах.
- На тестовой учетной записи расшифруйте секрет и сгенерируйте код штатной библиотекой.
- Проверьте способ передачи master key через secret storage или переменные окружения.
Как исправить
Исправление лучше делать небольшими проверяемыми шагами. Перед изменением рабочих данных сделайте резервную копию или подготовьте обратную миграцию.
- Перенесите ключ шифрования через защищенное хранилище, а не через репозиторий.
- Сохраните прежний алгоритм расшифровки на период совместимости.
- Мигрируйте секреты транзакционно и ведите только технический счетчик ошибок.
- Подготовьте процедуру восстановления 2FA для единичных поврежденных записей.
Как проверить результат
- Старые TOTP-коды проходят на контрольных учетных записях после переключения.
- Резервные коды остаются одноразовыми, а секреты не появляются в логах.
- Повторите исходный проблемный сценарий и минимум один пограничный случай.
- Проверьте логи после исправления: отсутствие ошибки в интерфейсе еще не гарантирует корректную обработку.
- Убедитесь, что правка не нарушила соседние операции, права других ролей и повторную обработку события.
Чего не стоит делать
- Не отключайте проверки безопасности и разграничение доступа только ради исчезновения ошибки.
- Не меняйте массово рабочие данные без выборки, резервной копии и заранее подготовленного отката.
- Не запускайте повторно платежи, рассылки, возвраты или фоновые задачи, пока не проверена идемпотентность.
- Не оставляйте токены, пароли, персональные данные и полные тела запросов в открытых логах.
Как не допустить повторения
- Версионируйте формат шифрования отдельно от данных.
- Контролируйте NTP и заранее тестируйте восстановление ключа из защищенной копии.
Что подготовить для разбора
- Ссылку на проблемную страницу, метод API, задание, отчет или интеграцию.
- Точное описание ожидаемого и фактического результата без секретных ключей и паролей.
- Фрагмент лога за нужный период, идентификатор операции и пример входных данных.
- Список последних изменений и информацию о рабочем окружении.
Частые вопросы
Можно ли исправить проблему без полной переделки?
Чаще всего да. Если сначала найти точку расхождения, достаточно локальной правки в проверке, транзакции, обработчике события, настройке или запросе к данным.
Почему ошибка появляется не у всех?
Обычно различаются роль, состояние данных, устройство, регион, способ входа, версия клиента или порядок событий. Поэтому важно получить конкретный воспроизводимый пример.
Итог
Безопасный перенос сохраняет действующие приложения Authenticator и не требует массового отключения 2FA.
Если самостоятельно локализовать причину не получилось, я могу разобрать логи и код, воспроизвести ошибку, предложить безопасную правку и проверить ее на рабочем сценарии.