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

Since keeping multiple authentication databases in sync is a common problem when dealing with Apache, you can configure Apache to authenticate against Django’s authentication system directly. This requires Apache version >= 2.2 and mod_wsgi >= 2.0. For example, you could:

  • 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>

To support the WSGIAuthGroupScript directive, the same WSGI script mysite.wsgi must also import the groups_for_user function which returns a list of groups the given user belongs to.

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