Spec-Zone.ru › Django 6.0

Как выполнять аутентификацию через базу данных пользователей Django из Apache

Поскольку поддерживать синхронизацию нескольких баз данных аутентификации при работе с Apache — распространённая проблема, можно настроить Apache для прямой аутентификации через систему аутентификации Django. Для этого требуются Apache версии >= 2.2 и mod_wsgi версии >= 2.0. Например, можно:

  • Предоставлять статические файлы и медиафайлы напрямую из 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

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/6.0/howto/deployment/wsgi/apache-auth/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API