Hur man autentiserar sig mot Djangos användardatabas från Apache¶
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.
Observera
Om du har installerat en custom user model och vill använda denna standardautentiseringshanterare måste den stödja ett is_active
-attribut. Om du vill använda gruppbaserad auktorisering måste din anpassade användare ha en relation med namnet ”groups”, som hänvisar till ett relaterat objekt som har ett ”name”-fält. Du kan också ange din egen anpassade mod_wsgi auth-hanterare om din anpassade inte kan uppfylla dessa krav.
Autentisering med mod_wsgi
¶
Observera
Användningen av WSGIApplicationGroup %{GLOBAL}
i konfigurationerna nedan förutsätter att din Apache-instans endast kör en Django-applikation. Om du kör mer än en Django-applikation, se avsnittet Defining Application Groups i mod_wsgi-dokumenten för mer information om den här inställningen.
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:
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.
Använda Apache 2.2 med autentisering
Se till att mod_auth_basic
och mod_authz_user
är laddade.
Dessa kan vara statiskt kompilerade i Apache, eller så kan du behöva använda LoadModule för att ladda dem dynamiskt i din httpd.conf
:
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authz_user_module modules/mod_authz_user.so
Slutligen redigerar du ditt WSGI-skript mysite.wsgi
för att knyta Apaches autentisering till din webbplats autentiseringsmekanismer genom att importera funktionen 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()
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.