Аутентификация по базе данных пользователей 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/1.10/howto/deployment/wsgi/apache-auth/