Реализация безопасной двухфакторной аутентификации для страницы входа в систему с помощью мастера форм Django
поэтому в основном я хочу достичь чего-то похожего на реализацию двухфакторной аутентификации Google. Моя форма входа в систему состоит из 2-шаг мастера форм:
- Шаг 1 (проверка имени пользователя и пароля)
- Шаг 2 (аутентификация маркера безопасности)
сценарии использования будут:
- пользователь имеет маркер безопасности, связанный с его учетной записью: входит в систему, если пользователь проходит Шаг 1 и шаг 2
- пользователь не имеет маркера безопасности: регистрирует пользователя сразу после того, как он проходит Шаг 1 только
теперь я подкласс мастера форм django, который будет использоваться в качестве моего входа в систему. На Шаге 2 по умолчанию Django FormWizard будет включать значения полей из ранее представленных форм в качестве скрытых полей. Но, как вы знаете, пароль вводится на Шаге 1, поэтому я не хочу включать его в Шаг 2 по соображениям безопасности.
моей первой мыслью было бы использовать сессии, чтобы указать, если пользователь прошел Шаг 1, поэтому мне не нужно включать значения полей из Шага 1.. но, возможно, я что-то упускаю из виду. Какие более безопасные решения для этого?
также я не совсем понимаю использование security-hash в FormWizard. Кто-нибудь может объяснить?
Спасибо большое.
5 ответов
Я не совсем понимаю смысл маркера безопасности, но было бы проще и быстрее, если бы вы отказались от расширения FormWizard
и просто реализуйте его как два отдельных представления. Весь смысл FormWizard
разбить и объединить несколько форм в одну, и ваш конкретный случай использования идет против него-вы просто взломаете его, чтобы функционально сделать что-то иначе.
Что касается хэша безопасности, он вычисляет хэш для всех данных формы из успешно завершенных лестница. Это просто мера безопасности, чтобы гарантировать, что данные формы не изменились / не были изменены между шагами и что ни один из шагов не был каким-либо образом обойден.
более года после последнего ответа:
Django-двухфакторный-auth строит на django-otp и добавляет из коробки поддержку Google Authenticator, Twilio SMS, резервные коды. Очень внушительный.
Duo безопасности duo_web есть С открытым исходным кодом Django demo, который покажет вам один из способов сделать это (я разработчик дуэт).
демонстрационная установка имеет декоратор @duo_auth_requried, подобный встроенному @login_required, который проверяет файл cookie сеанса, указывающий, что пользователь прошел аутентификацию 2-го фактора. Декоратор @login_required проверяет локальную аутентификацию, декоратор @duo_auth_required проверяет 2-й фактор аутентификация и отсутствие либо перенаправляет пользователя в соответствующую форму.
разница с вашим описанием заключается в том, что мы не проверки подлинности в одной форме или передать данные между формами, мы делаем их отдельно. Просто защитите представление с обоими декораторами, и вы можете положиться на Django для утверждения локальной аутентификации до попытки аутентификации 2-го фактора.
на django-otp проект добавляет подключаемую двухфакторную аутентификацию в Django. Его можно интегрировать на различных уровнях, от взгляда для того чтобы сформировать к низкоуровневому API.
вы можете использовать существующий многофакторный сервер аутентификации, такой как LinOTP или privacyidea. Я создал django-плагин рецензии.