将django_agent_trust与django_two_factor_auth集成

时间:2015-04-04 01:49:34

标签: django django-authentication two-factor-authentication

我已经成功安装了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值的位置。我在表格向导的某个地方迷路了。

如果我认为你的论点有道理,我会接受质疑我整体方法的智慧的答案。这里有什么我想念的吗?

1 个答案:

答案 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中获得了一个提示。它似乎可用,也许在这种形式下更容易消化。这对我有用,但我怀疑这是一个更好的方法。欢迎补丁。