Hur man autentiserar sig mot Djangos användardatabas från ApacheLink to this heading

Eftersom det är ett vanligt problem att hålla flera autentiseringsdatabaser synkroniserade när man arbetar med Apache, kan du konfigurera Apache att autentisera mot Djangos autentiseringssystem direkt. Detta kräver Apache version >= 2.2 och mod_wsgi >= 2.0. Till exempel kan du:

  • Servera statiska filer/mediefiler direkt från Apache endast till autentiserade användare.

  • Autentisera åtkomst till ett Subversion-repository mot Django-användare med en viss behörighet.

  • Tillåt vissa användare att ansluta till en WebDAV-delning som skapats med mod_dav.

Autentisering med mod_wsgiLink to this heading

Se till att mod_wsgi är installerat och aktiverat och att du har följt stegen för att konfigurera Apache med mod_wsgi.

Redigera sedan Apache-konfigurationen så att du lägger till en plats som endast autentiserade användare ska kunna se:

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>

Direktivet WSGIAuthUserScript säger till mod_wsgi att köra funktionen check_password i det angivna wsgi-skriptet och skicka användarnamnet och lösenordet som det får från prompten. I det här exemplet är WSGIAuthUserScript detsamma som WSGIScriptAlias som definierar din applikation som skapas av django-admin startproject.

Slutligen redigerar du ditt WSGI-skript mysite.wsgi för att knyta Apaches autentisering till din webbplats autentiseringsmekanismer genom att importera funktionen 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()

Förfrågningar som börjar med /secret/ kommer nu att kräva att en användare autentiserar sig.

I mod_wsgi access control mechanisms documentation finns ytterligare detaljer och information om alternativa metoder för autentisering.

Auktorisering med mod_wsgi och Django-grupperLink to this heading

mod_wsgi tillhandahåller också funktionalitet för att begränsa en viss plats till medlemmar i en grupp.

I det här fallet bör Apache-konfigurationen se ut så här:

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>

För att stödja direktivet WSGIAuthGroupScript måste samma WSGI-skript mysite.wsgi också importera funktionen groups_for_user som returnerar en lista över grupper som den givna användaren tillhör.

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

Förfrågningar om /secret/ kommer nu också att kräva att användaren är medlem i gruppen ”secret-agents”.