Autenticando no Apache usuários do banco de dados do Django¶
Fazer autenticação mantendo múltiplas bases de dados em sincronia é um problema comum quando se trabalha com o Apache, por isso você pode configurar o Apache para usar o sistema de autenticação do Django diretamente. Por exemplo, você poderia:
- Servir arquivos static/media diretamente do Apache somente para usuários autenticados.
- Acessar um repositório Subversion autenticado para usuários Django com uma certa permissão.
- Permitir certos usuários conectarem-se para um compartilhamento WebDAV criado com o mod_dav.
Configurando o Apache¶
Para autenticar-se na base de dados do Django a partir de um arquivo de
configurações do Apache, você precisará utilizar a diretiva
PythonAuthenHandler
do mod_python junto com as tradicionais diretivas
Auth*
e Require
:
<Location /example/>
AuthType Basic
AuthName "example.com"
Require valid-user
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonAuthenHandler django.contrib.auth.handlers.modpython
</Location>
Usando o manipulador de autenticação com o Apache 2.2
Se você está usando Apache 2.2, você necessitará seguir alguns passos.
Você precisará se assegurar de que o mod_auth_basic
e
mod_authz_user
estão carregados. Esses devem ser compilados
estaticamente no Apache, ou você pode usar LoadModule
para carregar
dinamicamente (como demonstram os exemplos abaixo desta nota).
Você também precisará inserir diretivas de configuração que impedem que o
Apache tente utilizar outros módulos autenticação, bem como especificar a
diretiva AuthUserFile
e apontá-la para /dev/null
.
Dependendo dos módulos de autenticação que você tenha carregado, você
pode precisar ter uma ou mais das seguintes diretivas:
AuthBasicAuthoritative Off
AuthDefaultAuthoritative Off
AuthzLDAPAuthoritative Off
AuthzDBMAuthoritative Off
AuthzDefaultAuthoritative Off
AuthzGroupFileAuthoritative Off
AuthzOwnerAuthoritative Off
AuthzUserAuthoritative Off
Uma configuração completa, com direnças entre Apache 2.0 e Apache 2.2 marcadas em negrito, poderia parecer algo assim:
LoadModule auth_basic_module modules/mod_auth_basic.so LoadModule authz_user_module modules/mod_authz_user.so ... <Location /example/> AuthType Basic AuthName "example.com" AuthUserFile /dev/null AuthBasicAuthoritative Off Require valid-user SetEnv DJANGO_SETTINGS_MODULE mysite.settings PythonAuthenHandler django.contrib.auth.handlers.modpython </Location>
Por padrão, o manipulador de autenticação limitará o acesso para localização
/example/
para usuários marcados como staff. Você pode usar um conjunto de
diretivas PythonOption
para modificar esse comportamento:
PythonOption |
Explicação |
---|---|
DjangoRequireStaffStatus |
Se marcado como O padrão é |
DjangoRequireSuperuserStatus |
Se setado como O padrão é |
DjangoPermissionName |
O nome de uma permissão de acesso a exigir. Veja custom permissions para mais informações. Por padrão não será exigida autorização expressa. |
Note que algumas vezes o SetEnv
não funciona bem com esta configuração do
mod_python, por razões desconhecidas. Se você está encontrando problemas para
fazer o mod_python reconhecer seu DJANGO_SETTINGS_MODULE
, você pode
configurá-lo usando PythonOption
em vez de SetEnv
. Portanto, estas duas
diretivas do Apache são equivalentes:
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonOption DJANGO_SETTINGS_MODULE mysite.settings