---
title: "Authentification sur la base de données des utilisateurs de Django depuis Apache"
version: 1.11
locale: fr
source: https://docs.djangoproject.com/fr/1.11/howto/deployment/wsgi/apache-auth/
canonical: https://djangodocs.dev/fr/1.11/howto/deployment/wsgi/apache-auth/
---
# Authentification sur la base de données des utilisateurs de Django depuis Apache

É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](/fr/1.11/topics/auth/) de Django. Cela nécessite la version 2.2 ou plus récente d’Apache ainsi que la version 2 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](http://subversion.apache.org/) pour des utilisateurs Django ayant certaines permissions.
- Permettre à certains utilisateurs de se connecter à un partage WebDAV créé avec [mod\_dav](https://httpd.apache.org/docs/2.2/mod/mod_dav.html).

> **Note**
>
> Si vous avez installé un [modèle utilisateur personnalisé](/fr/1.11/topics/auth/customizing/#auth-custom-user) et que vous voulez utiliser ce gestionnaire d’authentification par défaut, votre modèle doit prendre en charge un attribut `is_active`. Si vous voulez exploiter l’autorisation basée sur des groupes d’utilisateurs, votre utilisateur personnalisé doit posséder une relation nommée « groups » qui se réfère à un objet lié possédant le champ « name ». Il est aussi possible de définir son propre gestionnaire d’authentification mod\_wsgi si l’utilisateur personnalisé ne peut pas répondre à ces exigences.

## Authentification avec `mod_wsgi`

> **Note**
>
> L’utilisation de `WSGIApplicationGroup %{GLOBAL}` dans les configurations ci-dessous présuppose que l’instance d’Apache ne sert qu’une seule application Django. Si vous faites fonctionner plus d’une application Django, référez-vous à la section [Defining Application Groups](https://modwsgi.readthedocs.io/en/develop/user-guides/configuration-guidelines.html#defining-application-groups) de la documentation de mod\_wsgi pour plus d’informations au sujet de ce réglage.

Assurez-vous que mod\_wsgi est installé et activé et que vous avez suivi les étapes de configuration de [Apache avec mod\_wsgi](/fr/1.11/howto/deployment/wsgi/modwsgi/).

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](/fr/1.11/howto/deployment/wsgi/).

> **Utilisation d’Apache 2.2 avec l’authentification**
>
> Vérifiez que `mod_auth_basic` et `mod_authz_user` sont chargés.
>
> Ils peuvent être compilés statiquement dans Apache ou vous devez peut-être utiliser LoadModule pour les charger dynamiquement dans votre fichier `httpd.conf`:
>
> ```apache
> LoadModule auth_basic_module modules/mod_auth_basic.so
> LoadModule authz_user_module modules/mod_authz_user.so
> ```

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`:

```
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](https://modwsgi.readthedocs.io/en/develop/user-guides/access-control-mechanisms.html) de mod\_wsgi fournissent des détails supplémentaires au sujet des méthodes alternatives d’authentification.

### Autorisation avec `mod_wsgi` et les groupes Django

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

Pour prendre en charge la directive `WSGIAuthGroupScript`, le même script WSGI `mysite.wsgi` doit aussi importer la fonction `groups_for_user` qui renvoie une liste de groupes auxquels l’utilisateur appartient.

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