Проверка подлинности по базе данных пользователей Django из Apache
Поскольку синхронизация нескольких баз данных аутентификации — распространённая проблема при работе с Apache, вы можете настроить Apache на прямую проверку подлинности по системе аутентификации Django. Для этого требуется версия Apache >= 2.2 и mod_wsgi >= 2.0. Например, вы можете:
- Передавать статические файлы static/media напрямую из Apache только авторизованным пользователям.
- Проверять доступ к репозиторию Subversion по пользователям Django с определённым разрешением.
- Разрешать определённым пользователям подключение к WebDAV-доступу, созданному с помощью mod_dav.
Примечание
Если вы установили пользовательскую модель User и хотите использовать этот обработчик аутентификации по умолчанию, он должен поддерживать атрибут 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
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/ теперь также потребуют, чтобы пользователь был участником группы «secret-agents».
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/apache-auth/