How to authenticate against Django’s user database from ApacheLink para este cabeçalho

Since keeping multiple authentication databases in sync is a common problem when dealing with Apache, you can configure Apache to authenticate against Django’s authentication system directly. This requires Apache version >= 2.2 and mod_wsgi >= 2.0. For example, you could:

  • Servir arquivos estáticos/media diretamente do Apache somente para usuários autenticados

  • Autenticar o acesso a um respositório Subversion para usuários Django com uma certa permissão.

  • Possibilita certos usuários a conectar a um compartilhamento WebDav criado com mod_dav.

Autenticação com mod_wsgiLink para este cabeçalho

Make sure that mod_wsgi is installed and activated and that you have followed the steps to set up Apache with mod_wsgi.

Depois, altere a configuração do Apache para adicionar um local que queira que somente usuários autenticados sejam capazes de ver:

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>

A diretiva WSGIAuthUserScript diz ao mod_wsgi para executar função check_password no script wsgi especificado, passando o usuário e senha que recebeu do “prompt”. Neste exemplo, o WSGIAuthUserScript é o mesmo que o WSGIScriptAlias que é quem define sua aplicação that is created by django-admin startproject.

Finalmente, altere seu script WSGI mysite.wsgi para conectar a autenticação do Apache ao mecanismo de autenticação do seu site importando a função check_password:

Code
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()

Requisições começando com /secret/ não requererão autenticação do usuário.

O mod_wsgi access control mechanisms documentation fornece detalhes adicionais e finromações sobre métodos alternativos de autenticação.

Autorização com mod_wsgi e grupos do DjangoLink para este cabeçalho

mod_wsgi também fornece funcionalidade para restringir membros de um grupo a um local particular.

Neste caso, a configuração do Apache se pareça com essa:

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>

To support the WSGIAuthGroupScript directive, the same WSGI script mysite.wsgi must also import the groups_for_user function which returns a list of groups the given user belongs to.

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

Requisições para /secret/ irão agora requerer que o usuário seja membro do grupo “secret-agents”.