Spec-Zone.ru › Django 4.1

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

Spec-Zone.ru

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