Autenticação do banco de dados de usuário do Django vindo do Apache.¶
Uma vez que manter múltiplos banco de dados de autenticação é um problema comum quando se trata do Apache, você pode configurar o Apache para autenticar diretamente no Django authentication system. Isso requer o Apache versão >= 2.2 e mod_wsgi >= 2.0. Por exemplo você poderia:
- 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.
Nota
Se você tiver instalado um: ref:custom user model <auth-custom-user> e quiser usar esse manipulador de autenticação padrão, ele deve suportar um atributo is_active
. Se você quiser usar a autorização baseada em grupo, seu usuário personalizado deve ter uma relação chamada ‘groups’, referindo-se a um objeto relacionado que tenha um campo ‘nome’. Você também pode especificar seu próprio manipulador de autenticação personalizado mod_wsgi se sua costomização não puder estar em conformidade com esses requisitos.
Autenticação com mod_wsgi
¶
Nota
O uso do WSGIApplicationGroup %{GLOBAL}
nas configurações abaixo presume que a instância de Apache está rodando somente uma aplicação Django. Se estiver rodando mais de uma aplicação Django, por favor refira-se a seção Defining Application Groups da documentaçao mod_wsgi para maiores informações sobre essa configuração.
Certifique-se que o mod_wsgi está instalado e ativo e que seguiu os passos para configuração 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:
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.
Usando Apache 2.2 com autenticação
Certifique-se que mod_auth_basic
e o mod_authz_user
foram carregados.
Esses podem ser compilados estaticamente dentro do Apache, ou é necessário usar o LoadModule para carregá-los dinamicamente no seu httpd.conf
:
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authz_user_module modules/mod_authz_user.so
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
:
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 Django¶
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:
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>
Para suportar a diretiva WSGIAuthGroupScript
, o mesmo script WSGI mysite.wsgi
deve importar também a função groups_for_user
que retorna uma lista de grupos aos quais o usuário pertence.
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”.