| Автоматизация 2FA: TOTP-аутентификация с расшифровкой QR-кода |
| 10.11.2025 00:00 |
|
Двухфакторная аутентификация (2FA) жизненно необходима для защиты пользовательских аккаунтов. Одноразовые пароли, основанные на времени (TOTP) – популярный метод 2FA, добавляющий к обычному паролю дополнительный уровень безопасности. Однако ручное тестирование 2FA может быть утомительным для QA-команд, особенно когда приходится сканировать QR-коды и вводить OTP в строго ограниченные временные интервалы. В этой статье мы рассмотрим, как полностью автоматизировать тестирование 2FA с использованием TOTP, Python, Playwright и декодирования QR-кодов. К концу статьи у вас будет отлаженный подход для эффективной автоматизации двухфакторной аутентификации в ваших тестах. Зачем автоматизировать 2FA? 2FA критически важна для защиты аккаунтов, но она также создает уникальные сложности при тестировании. Ручное тестирование 2FA зачастую отнимает много времени и сопровождается рисками ошибок, так как требует от тестировщика точного ввода одноразового кода в узком временном окне. При каждом запуске теста необходимо дождаться генерации нового OTP, ввести его вручную и надеяться, что всё пройдет без ошибок. Этот повторяющийся процесс делает ручное тестирование 2FA неэффективным — особенно на больших объемах или в условиях, когда остальная часть приложения уже покрыта автоматизированными тестами. Автоматизация 2FA дает ключевые преимущества с точки зрения надежности и эффективности. Генерация и проверка OTP происходит быстро и стабильно, что снижает вероятность человеческой ошибки и экономит драгоценное время команды QA. Автоматизация TOTP позволяет проверять 2FA в различных сценариях, обеспечивая постоянство и предсказуемость результатов. Это повышает скорость тестирования и упрощает обнаружение проблем в 2FA на ранних этапах. Более того, автоматизация 2FA упрощает интеграцию проверки безопасности в CI/CD-пайплайны, позволяя запускать тесты при каждом изменении кода. Автоматизируя тестирование 2FA на основе TOTP, команды могут поддерживать высокий уровень безопасности, оптимизировать процессы и в итоге повысить качество и защищённость своих приложений. Необходимые нструменты и библиотекиЧтобы автоматизировать двухфакторную аутентификацию на основе одноразовых паролей (TOTP), нам понадобится несколько ключевых инструментов и библиотек:
Установите все необходимые библиотеки с помощью команды: pip install playwright pyotp pyzbar pillow Тестовое приложение Приложение, используемое в этой статье – это веб-приложение для демонстрации двухфакторной аутентификации с использованием TOTP. Процесс входа начинается с ввода имени пользователя и пароля.
Страница входа тестового приложения После успешного ввода логина и пароля приложение генерирует уникальный QR-код, содержащий TOTP-секрет, который пользователь должен отсканировать для завершения входа. Страница проверки OTP в тестовом приложении Этап двухфакторной аутентификации (2FA), основанный на этом QR-коде, обеспечивает генерацию уникального одноразового кода (OTP) каждые 30 секунд, что значительно повышает безопасность процесса входа.
Страница успешного входа в тестовом приложении Шаг 1: Захват QR-кодаПосле отправки имени пользователя и пароля приложение отображает QR-код для прохождения двухфакторной аутентификации (2FA). С помощью Playwright мы можем захватить этот QR-код прямо со страницы, сделав скриншот конкретного элемента: page.wait_for_selector("#qr-code", timeout=5000)
Этот фрагмент кода ожидает появления QR-кода, а затем сохраняет его как изображение под именем qr_code_image.png. Это изображение будет использоваться на следующем этапе для извлечения секретного ключа TOTP. Шаг 2: Извлечение TOTP-секрета из QR-кодаСохранив изображение QR-кода, мы можем воспользоваться библиотекой pyzbar для его декодирования и получения URL, содержащего секретный ключ TOTP. Этот ключ необходим для генерации одноразовых кодов (OTP). from pyzbar.pyzbar import decode Сначала код открывает изображение QR-кода и использует функцию decode из библиотеки pyzbar для его расшифровки. Затем извлекается декодированный текст — обычно это URL-адрес, содержащий параметр secret. С помощью регулярного выражения из этого текста извлекается значение параметра secret и сохраняется в переменной secret_key. Этот ключ необходим для генерации TOTP-кодов в процессе аутентификации. Шаг 3: Генерация одноразового кода (OTP)Как только мы получили секретный ключ, можно сгенерировать одноразовый временный пароль (OTP) с помощью библиотеки pyotp. Такой код действителен лишь ограниченное время, что позволяет синхронизировать его с текущим кодом на сервере: import pyotp Функция totp.now() генерирует OTP, используя текущее время, и код будет действителен в течение короткого интервала, заданного алгоритмом TOTP. Шаг 4: Автоматизация процесса входа с OTPТеперь, когда у нас есть OTP, мы можем завершить процесс входа, введя имя пользователя, пароль и одноразовый код. В случае ошибки валидации OTP можно сделать повторную попытку или отобразить сообщение об ошибке: page.fill("#username", username)
Этот фрагмент кода автоматически заполняет поля имени пользователя, пароля и одноразового кода, тем самым полностью имитируя процесс входа с двухфакторной аутентификацией. Полный сценарийНиже представлен полный интегрированный скрипт, объединяющий все предыдущие шаги в единый процесс автоматизированного входа с двухфакторной аутентификацией (2FA): def login_with_otp(username, password): Этот скрипт последовательно проходит через каждый шаг: авторизация, захват и расшифровка QR-кода, генерация OTP и завершение процесса авторизации. Он выдаст ошибку, если QR-код или OTP невалидны, и в результате мы получим надежное и устойчивое решение по автоматизации 2FA. Лучшие практики автоматизации двухфакторной аутентификации (2FA)Чтобы автоматизация 2FA была надёжной, безопасной и стабильной, следуйте этим рекомендациям:
QR-коды содержат TOTP-секреты, которые являются чувствительной информацией. Чтобы предотвратить несанкционированный доступ, подумайте, не стоит ли шифровать изображения или хранить их временно, удаляя после завершения теста. Используйте защищённые права доступа к файлам, чтобы другие процессы не могли их прочитать во время выполнения теста.
Убедитесь, что чувствительная информация вроде логинов, паролей или TOTP-секретов не логируется и не сохраняется в логах или отчетах о тестировании. Используйте переменные окружения для безопасного управления учетными данными, и избегайте хардкода чувствительных данных в тестах..
OTP, как правило, валидны в течение примерно 30 секунд. Добавьте тесты, в которых используется устаревший OTP — результатом должен быть отказ в авторизации. Также подумайте о сценариях, в которых клиентское или серверное время сдвинуто на ±5–10 секунд, и проверьте, как система справляется с временным дрейфом.
Тестируя на стейдже, создавайте отдельные тестовые аккаунты с включённой 2FA, чтобы не затронуть реальные учетные записи. Имитируйте или изолируйте тест-окружение от прода, чтобы тестовые данные не вмешивались в реальные данные и авторизацию.
Для надежности автоматизации разрешайте ограниченное количество повторных попыток, если валидация OTP случайно падает, но не увлекайтесь. Если ошибки возникают постоянно — это симптом проблем с синхронизацией или стабильностью теста. Устраните основную причину, а не увеличивайте количество попыток – это приведет лишь к ненадежности тестов. Заключение и дальнейшие шагиАвтоматизация тестирования 2FA с помощью TOTP — это мощный способ упростить проверку аутентификации в приложениях. В этом руководстве рассмотрены все этапы — от захвата QR-кодов до извлечения секретов и автоматического ввода OTP — для выстраивания надёжного процесса тестирования 2FA. Такой подход позволяет сэкономить время и снизить вероятность человеческой ошибки, повышая безопасность и стабильность тестирования. Для дальнейшего улучшения рассмотрите возможность интеграции в CI/CD-пайплайн, чтобы автоматизировать тесты 2FA в вашем процессе непрерывного развертывания – это поможет выявлять проблемы на ранних стадиях и поддерживать безопасные, качественные релизы. Если вы хотите опробовать этот подход, полный пример кода с обработкой ошибок, а также тестовое приложение с инструкциями по настройке доступны на нашей странице GitHub. Мы рекомендуем изучить пример, адаптировать его под ваши задачи тестирования и улучшить настройку проверки аутентификации уже сегодня! |