# Documentação Django 5.2.8

# How to authenticate against Django’s user database from 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.

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:

    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”.