Как аутентифицироваться по базе данных пользователей Django из Apache
Поскольку одновременное обновление нескольких баз аутентификации — распространённая проблема при работе с Apache, вы можете настроить Apache для прямой аутентификации по базе данных пользователей Django. Это требует Apache версии >= 2.2 и mod_wsgi >= 2.0. Например, вы можете:
- Предоставлять статические файлы static/media напрямую из Apache только авторизованным пользователям.
- Проверять доступ к репозиторию Subversion по учетным записям Django с определёнными правами.
- Разрешать определённым пользователям подключение к общей папке WebDAV, созданной с помощью mod_dav.
Примечание
Если вы установили пользовательскую модель пользователя и хотите использовать этот обработчик аутентификации по умолчанию, он должен поддерживать атрибут is_active. Если вы хотите использовать авторизацию на основе групп, ваш пользователь должен иметь отношение под названием ‘groups’, ссылающееся на связанный объект, имеющий поле ‘name’. Вы также можете указать собственный пользовательский обработчик аутентификации mod_wsgi, если ваш пользовательский не соответствует этим требованиям.
Аутентификация с помощью mod_wsgi
Примечание
Использование WSGIApplicationGroup %{GLOBAL} в конфигурациях ниже предполагает, что ваш экземпляр Apache запускает только одно приложение Django. Если вы запускаете более одного приложения Django, обратитесь к разделу Определение групп приложений документации mod_wsgi для получения дополнительной информации об этой настройке.
Убедитесь, что 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
В этом случае конфигурация 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/ теперь также потребуют, чтобы пользователь был членом группы «secret-agents».
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/4.2/howto/deployment/wsgi/apache-auth/