Как аутентифицироваться в базе данных пользователей Django из Apache
Поскольку синхронизация нескольких баз данных аутентификации является распространенной проблемой при работе с Apache, вы можете настроить Apache для аутентификации непосредственно в системе аутентификации Django authentication system. Для этого требуется Apache версии >= 2.2 и mod_wsgi >= 2.0. Например, вы можете:
- Обслуживать статические/медиа файлы напрямую из Apache только для авторизованных пользователей.
- Аутентифицировать доступ к репозиторию Subversion для пользователей Django с определенным разрешением.
- Разрешить определенным пользователям подключаться к общей папке WebDAV, созданной с помощью mod_dav.
Примечание
Если вы установили custom user model и хотите использовать этот обработчик аутентификации по умолчанию, он должен поддерживать атрибут is_active. Если вы хотите использовать авторизацию на основе групп, ваш пользовательский пользователь должен иметь отношение с именем «groups», ссылающееся на связанный объект, который имеет поле «name». Вы также можете указать свой собственный пользовательский обработчик аутентификации mod_wsgi, если ваш пользовательский обработчик не может соответствовать этим требованиям.
Аутентификация с mod_wsgi
Примечание
Использование WSGIApplicationGroup %{GLOBAL} в приведенных ниже конфигурациях предполагает, что ваш экземпляр Apache запускает только одно приложение Django. Если вы запускаете более одного приложения Django, обратитесь к разделу Defining Application Groups документации 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, которая определяет ваше приложение that is created by 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 предоставляет дополнительные сведения и информацию о альтернативных методах аутентификации.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.2/howto/deployment/wsgi/apache-auth/