Come autenticare da Apache verso il database utenti di DjangoLink to this heading

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.

Autenticazione con mod_wsgiLink to this heading

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:

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

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:

Code
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 DjangoLink to this heading

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 :

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

Python
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»-