Аутентификация по базе данных пользователей 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/
теперь также требуют, чтобы пользователь был членом группы «секретные агенты».