{"title":"Authentification sur la base de données des utilisateurs de Django depuis Apache","version":"2.0","locale":"fr","docname":"howto/deployment/wsgi/apache-auth","url":"/fr/2.0/howto/deployment/wsgi/apache-auth/","canonical":"https://djangodocs.dev/fr/2.0/howto/deployment/wsgi/apache-auth/","summary":"É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…","html":"<h1>Authentification sur la base de données des utilisateurs de Django depuis Apache<a class=\"heading-anchor\" href=\"#authenticating-against-django-s-user-database-from-apache\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>É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  <a class=\"reference internal\" href=\"/fr/2.0/topics/auth/\"><span class=\"doc\">système d’authentification</span></a> 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 :</p>\n<ul class=\"simple\">\n<li><p>Servir des fichiers static/media limités aux utilisateurs authentifiés directement depuis Apache.</p></li>\n<li><p>Accéder de manière authentifiée à un dépôt <a class=\"reference external\" href=\"https://subversion.apache.org/\">Subversion</a> pour des utilisateurs Django ayant certaines permissions.</p></li>\n<li><p>Permettre à certains utilisateurs de se connecter à un partage WebDAV créé avec <a class=\"reference external\" href=\"https://httpd.apache.org/docs/2.2/mod/mod_dav.html\">mod_dav</a>.</p></li>\n</ul>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Si vous avez installé un <a class=\"reference internal\" href=\"/fr/2.0/topics/auth/customizing/#auth-custom-user\"><span class=\"std std-ref\">modèle utilisateur personnalisé</span></a> et que vous voulez utiliser ce gestionnaire d’authentification par défaut, votre modèle doit prendre en charge un attribut <code class=\"docutils literal notranslate\"><span class=\"pre\">is_active</span></code>. 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.</p>\n</aside>\n<section id=\"authentication-with-mod-wsgi\">\n<h2>Authentification avec <code class=\"docutils literal notranslate\"><span class=\"pre\">mod_wsgi</span></code><a class=\"heading-anchor\" href=\"#authentication-with-mod-wsgi\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>L’utilisation de <code class=\"docutils literal notranslate\"><span class=\"pre\">WSGIApplicationGroup</span> <span class=\"pre\">%{GLOBAL}</span></code> 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 <a class=\"reference external\" href=\"https://modwsgi.readthedocs.io/en/develop/user-guides/configuration-guidelines.html#defining-application-groups\">Defining Application Groups</a> de la documentation de mod_wsgi pour plus d’informations au sujet de ce réglage.</p>\n</aside>\n<p>Assurez-vous que mod_wsgi est installé et activé et que vous avez suivi les étapes de configuration de <a class=\"reference internal\" href=\"/fr/2.0/howto/deployment/wsgi/modwsgi/\"><span class=\"doc\">Apache avec mod_wsgi</span></a>.</p>\n<p>Ensuite, modifiez votre configuration Apache pour ajouter un emplacement dont vous souhaitez limiter l’accès aux utilisateurs authentifiés :</p>\n<div class=\"code-block\" data-language=\"apache\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Apache</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Apache code\"><code><span class=\"nb\">WSGIScriptAlias</span><span class=\"w\"> </span>/<span class=\"w\"> </span><span class=\"sx\">/path/to/mysite.com/mysite/wsgi.py</span>\n<span class=\"nb\">WSGIPythonPath</span><span class=\"w\"> </span><span class=\"sx\">/path/to/mysite.com</span>\n\n<span class=\"nb\">WSGIProcessGroup</span><span class=\"w\"> </span>%{GLOBAL}\n<span class=\"nb\">WSGIApplicationGroup</span><span class=\"w\"> </span>%{GLOBAL}\n\n<span class=\"nt\">&lt;Location</span><span class=\"w\"> </span><span class=\"s\">&quot;/secret&quot;</span><span class=\"nt\">&gt;</span>\n<span class=\"w\">    </span><span class=\"nb\">AuthType</span><span class=\"w\"> </span>Basic\n<span class=\"w\">    </span><span class=\"nb\">AuthName</span><span class=\"w\"> </span><span class=\"s2\">&quot;Top Secret&quot;</span>\n<span class=\"w\">    </span><span class=\"nb\">Require</span><span class=\"w\"> </span>valid-user\n<span class=\"w\">    </span><span class=\"nb\">AuthBasicProvider</span><span class=\"w\"> </span>wsgi\n<span class=\"w\">    </span><span class=\"nb\">WSGIAuthUserScript</span><span class=\"w\"> </span><span class=\"sx\">/path/to/mysite.com/mysite/wsgi.py</span>\n<span class=\"nt\">&lt;/Location&gt;</span>\n</code></pre></div>\n<p>La directive <code class=\"docutils literal notranslate\"><span class=\"pre\">WSGIAuthUserScript</span></code> dit à mod_wsgi d’exécuter la fonction <code class=\"docutils literal notranslate\"><span class=\"pre\">check_password</span></code> 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 <code class=\"docutils literal notranslate\"><span class=\"pre\">WSGIAuthUserScript</span></code> est identique à <code class=\"docutils literal notranslate\"><span class=\"pre\">WSGIScriptAlias</span></code> qui définit votre application <a class=\"reference internal\" href=\"/fr/2.0/howto/deployment/wsgi/\"><span class=\"doc\">créée par django-admin startproject</span></a>.</p>\n<aside class=\"admonition-using-apache-2-2-with-authentication admonition\">\n<p class=\"admonition-title\">Utilisation d’Apache 2.2 avec l’authentification</p>\n<p>Vérifiez que <code class=\"docutils literal notranslate\"><span class=\"pre\">mod_auth_basic</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">mod_authz_user</span></code> sont chargés.</p>\n<p>Ils peuvent être compilés statiquement dans Apache ou vous devez peut-être utiliser LoadModule pour les charger dynamiquement dans votre fichier <code class=\"docutils literal notranslate\"><span class=\"pre\">httpd.conf</span></code>:</p>\n<div class=\"code-block\" data-language=\"apache\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Apache</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Apache code\"><code><span class=\"nb\">LoadModule</span><span class=\"w\"> </span>auth_basic_module<span class=\"w\"> </span>modules/mod_auth_basic.so\n<span class=\"nb\">LoadModule</span><span class=\"w\"> </span>authz_user_module<span class=\"w\"> </span>modules/mod_authz_user.so\n</code></pre></div>\n</aside>\n<p>Finalement, modifiez votre script WSGI <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite.wsgi</span></code> pour lier l’authentification Apache aux mécanismes d’authentification de votre site en important la fonction <code class=\"docutils literal notranslate\"><span class=\"pre\">check_password</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">os</span>\n\n<span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">[</span><span class=\"s1\">&#39;DJANGO_SETTINGS_MODULE&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;mysite.settings&#39;</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.handlers.modwsgi</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">check_password</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.handlers.wsgi</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">WSGIHandler</span>\n<span class=\"n\">application</span> <span class=\"o\">=</span> <span class=\"n\">WSGIHandler</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Les requêtes commençant pas <code class=\"docutils literal notranslate\"><span class=\"pre\">/secret/</span></code> vont dorénavant exiger l’authentification des utilisateurs.</p>\n<p>La <a class=\"reference external\" href=\"https://modwsgi.readthedocs.io/en/develop/user-guides/access-control-mechanisms.html\">documentation sur les mécanismes de contrôle d’accès</a> de mod_wsgi fournissent des détails supplémentaires au sujet des méthodes alternatives d’authentification.</p>\n<section id=\"authorization-with-mod-wsgi-and-django-groups\">\n<h3>Autorisation avec <code class=\"docutils literal notranslate\"><span class=\"pre\">mod_wsgi</span></code> et les groupes Django<a class=\"heading-anchor\" href=\"#authorization-with-mod-wsgi-and-django-groups\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>mod_wsgi offre également la possibilité de limiter l’accès à un emplacement particulier en fonction de l’appartenance à un groupe.</p>\n<p>Dans ce cas, la configuration Apache devrait ressembler à ceci :</p>\n<div class=\"code-block\" data-language=\"apache\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Apache</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Apache code\"><code><span class=\"nb\">WSGIScriptAlias</span><span class=\"w\"> </span>/<span class=\"w\"> </span><span class=\"sx\">/path/to/mysite.com/mysite/wsgi.py</span>\n\n<span class=\"nb\">WSGIProcessGroup</span><span class=\"w\"> </span>%{GLOBAL}\n<span class=\"nb\">WSGIApplicationGroup</span><span class=\"w\"> </span>%{GLOBAL}\n\n<span class=\"nt\">&lt;Location</span><span class=\"w\"> </span><span class=\"s\">&quot;/secret&quot;</span><span class=\"nt\">&gt;</span>\n<span class=\"w\">    </span><span class=\"nb\">AuthType</span><span class=\"w\"> </span>Basic\n<span class=\"w\">    </span><span class=\"nb\">AuthName</span><span class=\"w\"> </span><span class=\"s2\">&quot;Top Secret&quot;</span>\n<span class=\"w\">    </span><span class=\"nb\">AuthBasicProvider</span><span class=\"w\"> </span>wsgi\n<span class=\"w\">    </span><span class=\"nb\">WSGIAuthUserScript</span><span class=\"w\"> </span><span class=\"sx\">/path/to/mysite.com/mysite/wsgi.py</span>\n<span class=\"w\">    </span><span class=\"nb\">WSGIAuthGroupScript</span><span class=\"w\"> </span><span class=\"sx\">/path/to/mysite.com/mysite/wsgi.py</span>\n<span class=\"w\">    </span><span class=\"nb\">Require</span><span class=\"w\"> </span><span class=\"k\">group</span><span class=\"w\"> </span>secret-agents\n<span class=\"w\">    </span><span class=\"nb\">Require</span><span class=\"w\"> </span>valid-user\n<span class=\"nt\">&lt;/Location&gt;</span>\n</code></pre></div>\n<p>Pour prendre en charge la directive <code class=\"docutils literal notranslate\"><span class=\"pre\">WSGIAuthGroupScript</span></code>, le même script WSGI <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite.wsgi</span></code> doit aussi importer la fonction <code class=\"docutils literal notranslate\"><span class=\"pre\">groups_for_user</span></code> qui renvoie une liste de groupes auxquels l’utilisateur appartient.</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.handlers.modwsgi</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">check_password</span><span class=\"p\">,</span> <span class=\"n\">groups_for_user</span>\n</code></pre></div>\n<p>Les requêtes à <code class=\"docutils literal notranslate\"><span class=\"pre\">/secret/</span></code> vont dorénavant aussi exiger que l’utilisateur soit membre du groupe  « secret-agents ».</p>\n</section>\n</section>","rootId":"authenticating-against-django-s-user-database-from-apache","toc":[{"title":"Authentification avec mod_wsgi","anchor":"authentication-with-mod-wsgi","children":[{"title":"Autorisation avec mod_wsgi et les groupes Django","anchor":"authorization-with-mod-wsgi-and-django-groups","children":[]}]}],"breadcrumbs":[{"docname":"howto/index","title":"Guides pratiques","url":"/fr/2.0/howto/"},{"docname":"howto/deployment/index","title":"Déploiement de Django","url":"/fr/2.0/howto/deployment/"},{"docname":"howto/deployment/wsgi/index","title":"Comment déployer avec WSGI","url":"/fr/2.0/howto/deployment/wsgi/"}],"prev":{"docname":"howto/deployment/wsgi/modwsgi","title":"Django avec Apache et mod_wsgi","url":"/fr/2.0/howto/deployment/wsgi/modwsgi/"},"next":{"docname":"howto/deployment/wsgi/gunicorn","title":"Déploiement de Django avec Gunicorn","url":"/fr/2.0/howto/deployment/wsgi/gunicorn/"},"formats":{"html":"/fr/2.0/howto/deployment/wsgi/apache-auth/","markdown":"/fr/2.0/howto/deployment/wsgi/apache-auth.md","json":"/fr/2.0/howto/deployment/wsgi/apache-auth.json"},"source":"https://github.com/django/django/blob/stable/2.0.x/docs/howto/deployment/wsgi/apache-auth.txt","official":"https://docs.djangoproject.com/fr/2.0/howto/deployment/wsgi/apache-auth/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}