Mehrere Benutzerdatenbanken für die Authentifikation synchron zu halten, ist immer ein Problem, wenn man mit Apache arbeitet. Um dies zu umgehen, kann man Apache dahingehend konfigurieren, dass die Authentifikation direkt gegen das Authentifikationssystem von Django durchgeführt wird. Somit könntest du zum Beispiel
Um nun Djangos Datenbank für die Authentifikation innerhalb von Apache zu verwenden, musst du mod_pythons PythonAuthenHandler-Direktive in Kombination mit den üblichen Auth*- und Require-Direktiven verwenden:
<Location /example/>
AuthType Basic
AuthName "example.com"
Require valid-user
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonAuthenHandler django.contrib.auth.handlers.modpython
</Location>
Authentifikationshandler mit Apache 2.2 verwenden
Wenn du Apache 2.2 verwendest, ist das leider noch nicht alles.
Zusätzlich musst du sicherstellen, dass mod_auth_basic und mod_authz_user geladen sind. Diese können entweder statisch in Apache kompiliert sein, oder du musst LoadModule verweden, um diese Module dynamisch zu laden (weiter unten kommt hierzu noch ein Beispiel).
Ausserdem musst du zusätzliche Einstellungen vornehmen, damit Apache nicht versucht, andere Authentifkationsmodule zu verwenden. Des Weiteren musst du AuthUserFile auf /dev/null setzen. Abhängig davon, welche Authentifikationsmodule geladen sind, musst eine oder mehrere der folgenden Direktiven angeben:
.. code-block:: apache
AuthBasicAuthoritative Off AuthDefaultAuthoritative Off AuthzLDAPAuthoritative Off AuthzDBMAuthoritative Off AuthzDefaultAuthoritative Off AuthzGroupFileAuthoritative Off AuthzOwnerAuthoritative Off AuthzUserAuthoritative Off
Eine vollständige Konfiguration (mit den Unterschieden zwischen Apache 2.0 und 2.2 fett hervorgehoben) könnte zum Beispiel so aussehen:
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authz_user_module modules/mod_authz_user.so
...
<Location /example/>
AuthType Basic
AuthName "example.com"
AuthUserFile /dev/null
AuthBasicAuthoritative Off
Require valid-user
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonAuthenHandler django.contrib.auth.handlers.modpython
</Location>
In diesem Beispiel wird Zugriff auf /example/ nur auf Benutzer beschränkt, die als Mitarbeiter markiert wurden. Es steht eine Reihe von PythonOption-Direktiven zur Verfügung, um dieses Verhalten zu modifizieren:
| PythonOption | Beschreibung |
|---|---|
| DjangoRequireStaffStatus | Wenn auf on gesetzt, dann werden lediglich Mitarbeiter (also jene Benutzer, deren is_staff-Feld gesetzt ist) zugelassen. Standardwert: on. |
| DjangoRequireSuperuserStatus | Wenn auf on gesetzt, dann werden lediglich Superuser (also jene Benutzer, deren is_superuser-Feld gesetzt ist) zugelassen. Standardwert: off. |
| DjangoPermissionName | Der Name der Berechtigung, die für den Zugriff benötigt wird. Siehe Eigene Berechtigungen für mehr Information. Standardmässig ist keine bestimmte Berechtigung gesetzt. |
Bitte bedenke aber, dass SetEnv aus unbekannten Gründen manchmal Probleme in dieser mod_python-Konfiguration machen kann. Wenn du Probleme hast, mod_python dein DJANGO_SETTINGS_MODULE mitzuteilen, kannst du dies auch mittels PythonOption tun und somit hier SetEnv umgehen. Hier sind diese beiden Direktiven gleichwertig:
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonOption DJANGO_SETTINGS_MODULE mysite.settings
Mar 01, 2010