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

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

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

Copyright ©2021 All rights reserved