Authentification sur la base de données des utilisateurs de Django depuis ApacheLien vers cette rubrique

Étant donné que la synchronisation de plusieurs bases de données d’authentification est un problème fréquent avec Apache, vous pouvez configurer Apache afin qu’il authentifie les utilisateurs à partir du système d’authentification de Django. Cela nécessite la version 2.2 ou plus récente d’Apache ainsi que la version 2.0 ou plus récente de mod_wsgi. Par exemple, vous pourriez :

  • Servir des fichiers static/media limités aux utilisateurs authentifiés directement depuis Apache.

  • Accéder de manière authentifiée à un dépôt Subversion pour des utilisateurs Django ayant certaines permissions.

  • Permettre à certains utilisateurs de se connecter à un partage WebDAV créé avec mod_dav.

Authentification avec mod_wsgiLien vers cette rubrique

Assurez-vous que mod_wsgi est installé et activé et que vous avez suivi les étapes de configuration de Apache avec mod_wsgi.

Ensuite, modifiez votre configuration Apache pour ajouter un emplacement dont vous souhaitez limiter l’accès aux utilisateurs authentifiés :

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 directive WSGIAuthUserScript dit à mod_wsgi d’exécuter la fonction check_password dans le script wsgi indiqué, en passant le nom d’utilisateur et le mot de passe qu’il reçoit de la boîte de dialogue. Dans cet exemple, le contenu de WSGIAuthUserScript est identique à WSGIScriptAlias qui définit votre application créée par django-admin startproject.

Finalement, modifiez votre script WSGI mysite.wsgi pour lier l’authentification Apache aux mécanismes d’authentification de votre site en important la fonction 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()

Les requêtes commençant pas /secret/ vont dorénavant exiger l’authentification des utilisateurs.

La documentation sur les mécanismes de contrôle d’accès de mod_wsgi fournissent des détails supplémentaires au sujet des méthodes alternatives d’authentification.

Autorisation avec mod_wsgi et les groupes DjangoLien vers cette rubrique

mod_wsgi offre également la possibilité de limiter l’accès à un emplacement particulier en fonction de l’appartenance à un groupe.

Dans ce cas, la configuration Apache devrait ressembler à ceci :

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

Les requêtes à /secret/ vont dorénavant aussi exiger que l’utilisateur soit membre du groupe « secret-agents ».