我已经成功安装了django_two_factor_auth:令牌登录,备份令牌和通过Twilio发送的短信似乎都运行正常。但是,我的用户不会容忍每次登录都必须输入令牌。
我的需求类似于以下讨论的内容: https://github.com/Bouke/django-two-factor-auth/issues/56
我希望在成功验证后30天内向用户提供推迟OTP验证的选项。
为此,我安装了django_agent_trust。如果安装了django_agent_trust,我修补了AuthenticationTokenForm以添加BooleanField:
(Authentication_okenForm中的two_factor / forms.py)
try:
from django_agent_trust import trust_agent
trust_this_agent = forms.BooleanField(label=_("Trust this browser for 30 days"),
required=False)
except:
pass
我能够通过使用django_agent_trust的django_agent_trust.trust_agent API无条件地设置和重置is_trusted标志。
问题在于找出捕获用户所选BooleanField值的位置。我在表格向导的某个地方迷路了。
如果我认为你的论点有道理,我会接受质疑我整体方法的智慧的答案。这里有什么我想念的吗?
答案 0 :(得分:1)
django_agent_trust 似乎是此用例的一个很好的捷径。它已经获得了安全的cookie支持,这是Django之前从未使用过的功能,加上我认为我需要的所有便利方法。
我能够通过一些额外的工作来完成它。
我遇到的问题是 django_agent_trust 只有在用户通过身份验证后才会验证签名的cookie - 来自请求对象的经过身份验证的用户。由于我试图最小化对 django_two_factor_auth 的更改,我需要决定是否在身份验证发生之前显示OTP表单。
我需要的所有工具都在 django_agent_trust 中。我将我需要的方法从中间件中提取到一个新的utils.py中,添加了一个用户' load_agent()的参数。然后,我能够从 django_two_factor_auth 的 LoginView 类中检查已验证但尚未登录的用户对象的cookie。
现在 django_two_factor_auth LoginView 可以在 has_token_step 和 has_backup_step 中测试代理商信任,以及一切正常more or less as the author predicted 11 months ago ......叹息。
我认为添加此信任元素可能对 django_two_factor_auth 的增强有意义。对所有这些组件的杂耍攻击似乎是错误的方法。
我从 django_otp 项目和added agent_trust as a "plugin" to two_factor中获得了一个提示。它似乎可用,也许在这种形式下更容易消化。这对我有用,但我怀疑这是一个更好的方法。欢迎补丁。