首页 > 解决方案 > 如何适当地勾勒出 django-duo-auth 的路径?

问题描述

我目前正致力于在我的 django 项目中实施 Duo 两因素身份验证。目前看起来 django-duo-auth 是最好的包。我安装了该软件包并阅读了他们自述文件中的基本说明:

https://github.com/Elmnir/django-duo-auth/blob/master/README.rst

然而,这导致我的项目不断重定向到“duo”的一个不存在的子目录,这就是我命名的路径。例如,我的应用程序在XX.XX.XX.XX:YYYYGoing to that url 中加载,自动将页面重定向到: http://XX.XX.XX.XX:YYYY/duo/login/?next=/

或者,XX.XX.XX.XX:YYYY/admin自动重定向到: http://XX.XX.XX.XX:YYYY/duo/login/?next=/admin

这只会导致 django 的通用 base.htmlduo_auth_form.html扩展

以下是一些相关代码的片段,尽管它与包的 README 建议没有太大区别

/urls.py

urlpatterns = [
...
    path('admin/', admin.site.urls),
    path('duo/',  include('duo_auth.urls')),
]

/设置.py

INSTALLED_APPS = [
    ...
    'duo_auth',
]

MIDDLEWARE = [
    ...
    'duo_auth.middleware.DuoAuthMiddleware',
]


DUO_CONFIG = {
    'DEFAULT': {
        'HOST': '<api-host-url>',
        'IKEY': '<integration_key>',
        'AKEY': '<app_secret_key>',
        'SKEY': '<secret_key>',
        'FIRST_STAGE_BACKENDS': [
            'django.contrib.auth.backends.ModelBackend',
        ]
    }
}

与自述文件的唯一区别是示例中的轻微重定向,在该示例do_auth_form.html 中我扩展到模板的子目录,即{% extends "dir\base.html" %}文件顶部。

看起来这个包是相当新的,并且没有很多论坛可以解决问题,所以我认为最好在这里提问。任何帮助,将不胜感激!

标签: pythondjangotwo-factor-authenticationdjango-two-factor-auth

解决方案


我相信这实际上是django-duo-auth按预期工作的包。中间件的工作方式是,在将其添加到您的项目后,将检查使用其中之一进行身份验证的任何经过身份验证的用户,FIRST_STAGE_BACKENDS以查看他们是否也已通过 Duo 进行身份验证,如果没有,他们将被重定向到Duo 登录页面在duo/login/并提示完成 Duo 身份验证,类似于 Django 的内置@login_required装饰器如何将匿名用户重定向accounts/login/到登录。

如果您有不想强制使用第二个因素的用户,我建议您创建一个ModelBackend仅对这些用户进行身份验证的子类。类似于本期中描述的方法,但颠倒了逻辑:

https://github.com/Elmnir/django-duo-auth/issues/1


推荐阅读