# Documentazione Django 5.2.8

# Come autenticare da Apache verso il database utenti di Django

Dal momento che mantenere più database di autenticazione sincronizzati è un problema comune quando si ha a che fare con Apache, è possibile configurare Apache in modo che si autentichi direttamente sul sistema di autenticazione di Django. Questo richiede la versione di Apache >= 2.2 e mod_wsgi >= 2.0. Ad esempio, potresti:

- Distribuire files static/media direttamente da Apache solo ad utenti autenticati.

- Autenticare l’accesso un repository Subversion per gli utenti Django con un certo permesso.

- Permettere ad alcuni utenti di connettersi ad una condivisione WebDAV creata con mod_dav.

Nota

Se hai installato un modello utente personalizzato e vuoi utilizzare questo gestore di autenticazione predefinito, deve supportare un attributo `is_active`. Se desideri utilizzare l’autorizzazione basata su gruppi, il tuo utente personalizzato deve avere una relazione denominata “gruppi”, che fa riferimento ad un oggetto correlato che ha un campo “nome”. Puoi anche specificare il tuo gestore di autenticazione mod_wsgi personalizzato se per consuetudine non puoi conformarti a questi requisiti.

## Autenticazione con `mod_wsgi`

Nota

L’uso di `WSGIApplicationGroup %{GLOBAL}` nella configurazione qui sotto presume che la tua istanza di Apache stia facendo girare una sola applicazione Django. Se stai facendo girare più di una applicazione Django, fai riferimento alla sezione Definire Gruppi di Applicazioni della documentazione mod_wsgi per avere più informazioni su questa impostazione.

Assicurati che mod_wsgi sia installato ed attivato e che tu abbia seguito gli step per impostare Apache con mod_wsgi.

Ora, modifica la tua configurazione di Apache per aggiungere una cartella che vuoi sia visibile solo ad utenti autenticati:

    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>

La direttiva `WSGIAuthUserScript` dice a mod_wsgi di eseguire la funzione `check_password` nello script wsgi specificato, passando il nome utente e la password che riceve dal prompt. In questo esempio, `WSGIAuthUserScript` è lo stesso di `WSGIScriptAlias` che definisce la tua applicazione creata da django-admin startproject.

Utilizzo di Apache 2.2 con autenticazione

Controlla bene che `mod_auth_basic` e `mod_authz_user` siano caricati

Queste possono essere compilate staticamente in Apache, o potresti aver bisogno di usare LoadModule per caricarle dinamicamente nel tuo `httpd.conf`:

    LoadModule auth_basic_module modules/mod_auth_basic.so
    LoadModule authz_user_module modules/mod_authz_user.so

Infine, modifica il tuo script WSGI `mysite.wsgi` per legare l’autenticazione di Apache ai meccanismi di autenticaizione del tuo sito importando la funzione `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()

Le richieste che iniziano con `/secret/` richiederanno un utente per l’autenticazione

La documentazione sui meccanismi di controllo di accesso di mod_wsgi offre dettagli aggiuntivi ed informazioni riguardo a metodi alternativi di autenticazione.

### Autorizzazione con `mod_wsgi` e gruppi Django

mod_wsgi fornisce anche funzionalita di restringere una location particolare a un membro del gruppo.

In questo caso, la configurazione di Apache dovrebbe essere cosi :

    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>

Per supportare la direttiva `WSGIAuthGroupScript`, lo stesso script WSGI `mysite.wsgi` deve anche importare la funzione `groups_for_user` che restituisce una lista di gruppi a cui un dato utente appartiene.

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

Le richieste di `/secret/` renderanno necessario che l’utente faccia parte del gruppo «secret-agents»-