Как правильно обозначить путь для django-duo-auth?

В настоящее время я работаю над внедрением двухфакторной аутентификации Duo в свой проект django. В настоящее время похоже, что django-duo-auth - лучший пакет для этого. Я установил пакет и просмотрел основные инструкции в их README:

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

Однако это привело к тому, что мой проект постоянно перенаправлялся в несуществующий подкаталог duo, который я назвал путем. Например, мое приложение загружено в XX.XX.XX.XX:YYYY Переход по этому 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

Это просто приведет к основному файлу base.html django, который duo_auth_form.html расширяет

Вот несколько фрагментов соответствующего кода, хотя он не сильно отличается от предложений README пакета.

/urls.py

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

/settings.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" %} вверху файла.

Похоже, этот пакет довольно новый, и форумов по проблемам не так много, поэтому я подумал, что лучше спросить здесь. Любая помощь будет оценена по достоинству!

1 ответ

Я считаю, что это на самом деле django-duo-authпакет работает по назначению. Промежуточное программное обеспечение работает следующим образом: после его добавления в проект любой аутентифицированный пользователь, который был аутентифицирован с помощью одного из FIRST_STAGE_BACKENDSбудут проверены, чтобы убедиться, что они также прошли аутентификацию в Duo, если нет, они будут перенаправлены на страницу входа в Duo по адресу duo/login/и предлагается выполнить аутентификацию Duo, подобно тому, как встроенный в Django @login_requiredдекоратор перенаправляет анонимного пользователя на accounts/login/чтобы залогиниться.

Если у вас есть пользователи, которым вы не хотите навязывать второй фактор, я бы рекомендовал создать подкласс класса ModelBackendкоторый аутентифицирует только этих пользователей. Аналогично подходу, описанному в этом выпуске, но с инвертированием логики:

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

Другие вопросы по тегам