• 3.2
  • 5.0
  • 6.1
  • Версия документации: 3.1

Аутентификация в пользовательской базе данных из Apache

Поскольку синхронизация нескольких баз данных аутентификации является распространенной проблемой при работе с Apache, вы можете настроить Apache для аутентификации с помощью системы аутентификации </topics/auth/index> 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 для получения дополнительной информации об этом параметре.

Make sure that mod_wsgi is installed and activated and that you have followed the steps to setup Apache with 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

Наконец, отредактируйте ваш скрипт 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 также предоставляет функциональность для ограничения доступа по определенным URL только для членов группы.

В этом случае конфигурация 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 тот же скрипт mysite.wsgi должен импортировать функцию groups_for_user, которая возвращает список групп, к которым принадлежит данный пользователь.

from django.contrib.auth.handlers.modwsgi import check_password, groups_for_user

Запросы на /secret/ теперь также потребуют от пользователя быть членом группы «secret-agents».

Back to Top