Как правильно обозначить путь для 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
который аутентифицирует только этих пользователей. Аналогично подходу, описанному в этом выпуске, но с инвертированием логики: