{"title":"Come autenticare da Apache verso il database utenti di Django","version":"5.0","locale":"it","docname":"howto/deployment/wsgi/apache-auth","url":"/it/5.0/howto/deployment/wsgi/apache-auth/","canonical":"https://djangodocs.dev/it/5.0/howto/deployment/wsgi/apache-auth/","summary":"Dal momento che mantenere più database di autenticazione sincronizzati è un problema comune quando si ha a che fare con Apache, è possibile configurare Apache in…","html":"<h1>Come autenticare da Apache verso il database utenti di Django<a class=\"heading-anchor\" href=\"#how-to-authenticate-against-django-s-user-database-from-apache\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Dal momento che mantenere più database di autenticazione sincronizzati è un problema comune quando si ha a che fare con Apache, è possibile configurare Apache in modo che si autentichi direttamente sul <a class=\"reference internal\" href=\"/it/5.0/topics/auth/\"><span class=\"doc\">sistema di autenticazione</span></a> di Django. Questo richiede la versione di Apache &gt;= 2.2 e mod_wsgi &gt;= 2.0. Ad esempio, potresti:</p>\n<ul class=\"simple\">\n<li><p>Distribuire files static/media direttamente da Apache solo ad utenti autenticati.</p></li>\n<li><p>Autenticare l’accesso un repository <a class=\"reference external\" href=\"https://subversion.apache.org/\">Subversion</a> per gli utenti Django con un certo permesso.</p></li>\n<li><p>Permettere ad alcuni utenti di connettersi ad una condivisione WebDAV creata con <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\">Nota</p>\n<p>Se hai installato un <a class=\"reference internal\" href=\"/it/5.0/topics/auth/customizing/#auth-custom-user\"><span class=\"std std-ref\">modello utente personalizzato</span></a> e vuoi utilizzare questo gestore di autenticazione predefinito, deve supportare un attributo <code class=\"docutils literal notranslate\"><span class=\"pre\">is_active</span></code>. Se desideri utilizzare l’autorizzazione basata su gruppi, il tuo utente personalizzato deve avere una relazione denominata “gruppi”, che fa riferimento ad un oggetto correlato che ha un campo “nome”. Puoi anche specificare il tuo gestore di autenticazione mod_wsgi personalizzato se per consuetudine non puoi conformarti a questi requisiti.</p>\n</aside>\n<section id=\"authentication-with-mod-wsgi\">\n<h2>Autenticazione con <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\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>L’uso di <code class=\"docutils literal notranslate\"><span class=\"pre\">WSGIApplicationGroup</span> <span class=\"pre\">%{GLOBAL}</span></code> nella configurazione qui sotto presume che la tua istanza di Apache stia facendo girare una sola applicazione Django. Se stai facendo girare più di una applicazione Django, fai riferimento alla sezione <a class=\"reference external\" href=\"https://modwsgi.readthedocs.io/en/develop/user-guides/configuration-guidelines.html#defining-application-groups\">Definire Gruppi di Applicazioni</a> della documentazione mod_wsgi per avere più informazioni su questa impostazione.</p>\n</aside>\n<p>Assicurati che mod_wsgi sia installato ed attivato e che tu abbia seguito gli step per impostare <a class=\"reference internal\" href=\"/it/5.0/howto/deployment/wsgi/modwsgi/\"><span class=\"doc\">Apache con mod_wsgi</span></a>.</p>\n<p>Ora, modifica la tua configurazione di Apache per aggiungere una cartella che vuoi sia visibile solo ad utenti autenticati:</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 direttiva <code class=\"docutils literal notranslate\"><span class=\"pre\">WSGIAuthUserScript</span></code> dice a mod_wsgi di eseguire la funzione <code class=\"docutils literal notranslate\"><span class=\"pre\">check_password</span></code> nello script wsgi specificato, passando il nome utente e la password che riceve dal prompt. In questo esempio, <code class=\"docutils literal notranslate\"><span class=\"pre\">WSGIAuthUserScript</span></code> è lo stesso di <code class=\"docutils literal notranslate\"><span class=\"pre\">WSGIScriptAlias</span></code> che definisce la tua applicazione <a class=\"reference internal\" href=\"/it/5.0/howto/deployment/wsgi/\"><span class=\"doc\">creata da django-admin startproject</span></a>.</p>\n<aside class=\"admonition-using-apache-2-2-with-authentication admonition\">\n<p class=\"admonition-title\">Utilizzo di Apache 2.2 con autenticazione</p>\n<p>Controlla bene che  <code class=\"docutils literal notranslate\"><span class=\"pre\">mod_auth_basic</span></code> e <code class=\"docutils literal notranslate\"><span class=\"pre\">mod_authz_user</span></code> siano caricati</p>\n<p>Queste possono essere compilate staticamente in Apache, o potresti aver bisogno di usare LoadModule per caricarle dinamicamente nel tuo <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>Infine, modifica il tuo script WSGI <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite.wsgi</span></code> per legare l’autenticazione di Apache ai meccanismi di autenticaizione del tuo sito importando la funzione  <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=\"s2\">&quot;DJANGO_SETTINGS_MODULE&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;mysite.settings&quot;</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\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>Le richieste che iniziano con  <code class=\"docutils literal notranslate\"><span class=\"pre\">/secret/</span></code> richiederanno un utente per l’autenticazione</p>\n<p>La  <a class=\"reference external\" href=\"https://modwsgi.readthedocs.io/en/develop/user-guides/access-control-mechanisms.html\">documentazione sui meccanismi di controllo di accesso</a> di mod_wsgi offre dettagli aggiuntivi ed informazioni riguardo a metodi alternativi di autenticazione.</p>\n<section id=\"authorization-with-mod-wsgi-and-django-groups\">\n<h3>Autorizzazione con <code class=\"docutils literal notranslate\"><span class=\"pre\">mod_wsgi</span></code> e gruppi Django<a class=\"heading-anchor\" href=\"#authorization-with-mod-wsgi-and-django-groups\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>mod_wsgi fornisce anche funzionalita di restringere una location particolare a un membro del gruppo.</p>\n<p>In questo caso, la configurazione di Apache dovrebbe essere cosi :</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>Per supportare la direttiva <code class=\"docutils literal notranslate\"><span class=\"pre\">WSGIAuthGroupScript</span></code>, lo stesso script WSGI <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite.wsgi</span></code> deve anche importare la funzione <code class=\"docutils literal notranslate\"><span class=\"pre\">groups_for_user</span></code> che restituisce una lista di gruppi a cui un dato utente appartiene.</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>Le richieste di <code class=\"docutils literal notranslate\"><span class=\"pre\">/secret/</span></code> renderanno necessario che l’utente faccia parte del gruppo «secret-agents»-</p>\n</section>\n</section>","rootId":"how-to-authenticate-against-django-s-user-database-from-apache","toc":[{"title":"Autenticazione con mod_wsgi","anchor":"authentication-with-mod-wsgi","children":[{"title":"Autorizzazione con mod_wsgi e gruppi Django","anchor":"authorization-with-mod-wsgi-and-django-groups","children":[]}]}],"breadcrumbs":[{"docname":"howto/index","title":"guide «How-to»","url":"/it/5.0/howto/"},{"docname":"howto/deployment/index","title":"Come distribuire Django","url":"/it/5.0/howto/deployment/"},{"docname":"howto/deployment/wsgi/index","title":"Come distribuire con WSGI.","url":"/it/5.0/howto/deployment/wsgi/"}],"prev":{"docname":"howto/deployment/wsgi/modwsgi","title":"Come usare Django con Apache e mod_wsgi","url":"/it/5.0/howto/deployment/wsgi/modwsgi/"},"next":{"docname":"howto/deployment/asgi/index","title":"Come distribuire con ASGI.","url":"/it/5.0/howto/deployment/asgi/"},"formats":{"html":"/it/5.0/howto/deployment/wsgi/apache-auth/","markdown":"/it/5.0/howto/deployment/wsgi/apache-auth.md","json":"/it/5.0/howto/deployment/wsgi/apache-auth.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/howto/deployment/wsgi/apache-auth.txt","official":"https://docs.djangoproject.com/it/5.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"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}