Аутентификация по базе данных пользователей Django из Apache

Поскольку синхронизация нескольких баз данных аутентификации является общей проблемой для Apache, вы можете настроить Apache для аутентификации пользователей из системы аутентификации Django. Для этого требуется Apache версии 2.2 или новее, а также mod_wsgi версии 2 или новее. Например, вы можете:

  • Предоставление ограниченного количества статических / мультимедийных файлов аутентифицированным пользователям напрямую из Apache.
  • Доступ с аутентификацией к репозиторию Subversion для пользователей Django с определенными разрешениями.
  • Разрешить определенным пользователям подключаться к общему ресурсу WebDAV, созданному с помощью mod_dav .

Заметка

Если вы установили настраиваемый шаблон пользователя и хотите использовать этот обработчик проверки подлинности по умолчанию, ваш шаблон должен поддерживать атрибут is_active . Если вы хотите использовать авторизацию на основе групп пользователей, ваш пользовательский пользователь должен иметь отношение с именем «группы», которое относится к связанному объекту с полем «имя». Также можно определить свой собственный обработчик аутентификации mod_wsgi, если пользовательский пользователь не может удовлетворить эти требования.

Аутентификация с mod_wsgi

Заметка

Использование в приведенных ниже конфигурациях предполагает, что экземпляр Apache обслуживает только одно приложение Django. Если вы используете более одного приложения Django, обратитесь к разделу « Определение групп приложений» документации mod_wsgi для получения дополнительной информации об этой настройке.WSGIApplicationGroup %{GLOBAL}

Убедитесь, что mod_wsgi установлен и включен, и что вы выполнили шаги по настройке Apache с помощью mod_wsgi .

Затем измените конфигурацию Apache, чтобы добавить местоположение, к которому вы хотите ограничить доступ для аутентифицированных пользователей:

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonPath /path/to/mysite.com

WSGIProcessGroup %{GLOBAL}
WSGIApplicationGroup %{GLOBAL}

<Location "/secret">
    AuthType Basic
    AuthName "Top Secret"
    Require valid-user
    AuthBasicProvider wsgi
    WSGIAuthUserScript /path/to/mysite.com/mysite/wsgi.py
</Location>

Директива WSGIAuthUserScript указывает mod_wsgi запустить функцию check_password в указанном сценарии wsgi, передавая имя пользователя и пароль, которые он получает из диалогового окна. В этом примере содержимое WSGIAuthUserScript совпадает с содержимым WSGIScriptAlias вашего приложения, созданного django-admin startproject .

Использование Apache 2.2 с аутентификацией

Проверьте это mod_auth_basic и mod_authz_user загружаются.

Они могут быть статически скомпилированы в Apache или вам может потребоваться использовать LoadModule для динамической загрузки их в ваш файл httpd.conf :

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authz_user_module modules/mod_authz_user.so

Наконец, измените сценарий WSGI, mysite.wsgi чтобы связать аутентификацию Apache с механизмами аутентификации вашего сайта, импортировав функцию check_password :

import os

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

from django.contrib.auth.handlers.modwsgi import check_password

from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()

Запросы, начинающиеся с /secret/ , теперь требуют аутентификации пользователя.

Документация по механизму управления доступом mod_wsgi предоставляет дополнительные сведения об альтернативных методах аутентификации.

Авторизация с mod_wsgi группами и Django

mod_wsgi также предоставляет возможность ограничить доступ к определенному месту на основе членства в группе.

В этом случае конфигурация Apache должна выглядеть так:

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py

WSGIProcessGroup %{GLOBAL}
WSGIApplicationGroup %{GLOBAL}

<Location "/secret">
    AuthType Basic
    AuthName "Top Secret"
    AuthBasicProvider wsgi
    WSGIAuthUserScript /path/to/mysite.com/mysite/wsgi.py
    WSGIAuthGroupScript /path/to/mysite.com/mysite/wsgi.py
    Require group secret-agents
    Require valid-user
</Location>

Для поддержки директивы WSGIAuthGroupScript тот же сценарий WSGI mysite.wsgi должен также импортировать функцию, groups_for_user которая возвращает список групп, к которым принадлежит пользователь.

from django.contrib.auth.handlers.modwsgi import check_password, groups_for_user

Запросы к /secret/ теперь также требуют, чтобы пользователь был членом группы «секретные агенты».

Copyright ©2020 All rights reserved