使用Django表单向导为登录页面实现安全的双因素身份验证

所以基本上我想要实现类似Google双因素身份验证实现的东西。我的登录表单包含两步表单向导: 第1步(验证用户名和密码) 第2步(验证安全令牌) 使用场景将是: 用户具有与其帐户关联的安全令牌:如果用户通过了步骤1和步骤2,则将用户登录 用户没有安全令牌:仅在通过步骤1后立即记录用户 我现在将django的表单向导子类化为我的登录视图。在第2步中,默认情况下,Django FormWizard会将以前提交的表单中的字段值包含为隐藏字段。但是如您所知,密码是在步骤1中输入的,因此出于安全原因,我不希望将其包含在步骤2中。 我的第一个想法是使用会话来指示用户是否已通过步骤1,因此我不需要包含步骤1中的字段值..但我可能会忽略这里的某些内容。有什么更安全的解决方案? 另外我不太明白在FormWizard中使用security-hash。谁能解释一下? 非常感谢。     
已邀请:
我并没有完全明白安全令牌的意义,但是如果你放弃扩展
FormWizard
并将其作为两个独立的视图实现它,它似乎更简单,更快捷。
FormWizard
的重点是打破并将几种形式合并为一种形式,而你的特定用例则反对它 - 你只需要将其破解为功能性的其他方式。 对于安全性哈希,它会根据成功完成的步骤计算所有表单数据的哈希值。这只是一种安全措施,可确保表单数据未在步骤之间发生变化/被篡改,并且不会以某种方式绕过任何步骤。     
最后一个答案后一年多了: Django-two-factor-auth构建于django-otp之上,并为Google Authenticator,Twilio SMS,备份代码添加了开箱即用的支持。非常令人印象深刻。     
Duo Security的duo_web项目有一个开源Django演示,它将向您展示一种方法(我是Duo开发人员)。 演示设置有一个@duo_auth_requried装饰器,类似于内置的@login_required,它检查会话cookie,指示用户已通过第二个因子身份验证。 @login_required装饰器验证本地验证,@ duo_auth_required装饰器验证第二因素验证,并且缺少将用户重定向到相关表单。 与您的描述的不同之处在于,我们不会在单个表单中对两者进行身份验证,也不会在表单之间传递凭据,我们会单独执行。只需使用两个装饰器保护视图,您就可以依赖Django在尝试第二个因子身份验证之前断言本地身份验证。     
django-otp项目为Django添加了可插入的双因素身份验证。它可以在各种级别进行集成,从视图到表单再到低级API。     
您可以使用现有的多因素身份验证后端,如LinOTP或privacyidea。 我创建了一个django-plugin写。     

要回复问题请先登录注册