Manter diversos bancos de dados de autenticação 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:
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 on somente usuários "staff" (i.e. aqueles com o flag is_staff setado) serão permitidos. O padrão é on. |
DjangoRequireSuperuserStatus | Se setado como on somente super-usuários (i.e. aqueles com o flag is_superuser setado) serão permitidos. O padrão é off. |
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
Dec 26, 2011