Spec-Zone.ru › Django 1.10

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

Spec-Zone.ru

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