Spec-Zone.ru › Django 4.2

Как аутентифицироваться по базе данных пользователей 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

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

Spec-Zone.ru

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