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