{"title":"How to authenticate against Django’s user database from Apache","version":"5.1","locale":"el","docname":"howto/deployment/wsgi/apache-auth","url":"/el/5.1/howto/deployment/wsgi/apache-auth/","canonical":"https://djangodocs.dev/el/5.1/howto/deployment/wsgi/apache-auth/","summary":"Επειδή το να συγχρονίζετε πολλές πιστοποιημένες βάσεις δεδομένων είναι κοινό πρόβλημα, μπορείτε να παραμετροποιήσετε τον Apache ούτως ώστε να πιστοποιήσει εκείνος…","html":"<h1>How to authenticate against Django’s user database from Apache<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>Επειδή το να συγχρονίζετε πολλές πιστοποιημένες βάσεις δεδομένων είναι κοινό πρόβλημα, μπορείτε να παραμετροποιήσετε τον Apache ούτως ώστε να πιστοποιήσει εκείνος απ’ ευθείας το <a class=\"reference internal\" href=\"/el/5.1/topics/auth/\"><span class=\"doc\">σύστημα πιστοποίησης</span></a> του Django. Αυτό απαιτεί έκδοση του Apache &gt;= 2.2 και mod_wsgi &gt;= 2.0. Για παράδειγμα, θα μπορούσατε να:</p>\n<ul class=\"simple\">\n<li><p>Εξυπηρετήσετε τα static/media αρχεία απ’ ευθείας από τον Apache, μόνο σε πιστοποιημένους χρήστες.</p></li>\n<li><p>Πιστοποιήσετε την πρόσβαση σε ένα <a class=\"reference external\" href=\"https://subversion.apache.org/\">Subversion</a> repository για χρήστες του Django με συγκεκριμένα δικαιώματα.</p></li>\n<li><p>Επιτρέπετε σε συγκεκριμένους χρήστες να συνδεθούν σε ένα κοινόχρηστο WebDAV με το <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\">Σημείωση</p>\n<p>Αν έχετε εγκαταστήσει κάποιο <a class=\"reference internal\" href=\"/el/5.1/topics/auth/customizing/#auth-custom-user\"><span class=\"std std-ref\">δικό σας user model</span></a> και θέλετε να χρησιμοποιήσετε τον προεπιλεγμένο auth handler, τότε το δικό σας user model θα πρέπει να υποστηρίζει το attribute <code class=\"docutils literal notranslate\"><span class=\"pre\">is_active</span></code>. Αν θέλετε να χρησιμοποιήσετε την πιστοποίηση βάση ρόλων (group based authorization), τότε το δικό σας user model θα πρέπει να έχει μια συσχέτιση (relation) με το όνομα “groups”, η οποία θα αναφέρεται σε κάποιο object το οποίο θα πρέπει να έχει ένα πεδίο με το όνομα “name”. Μπορείτε, επίσης, να καθορίσετε τον δικό σας mod_wsgi auth handler αν βεβαίως δεν μπορείτε να συμβιβαστείτε με τις παραπάνω προϋποθέσεις.</p>\n</aside>\n<section id=\"authentication-with-mod-wsgi\">\n<h2>Πιστοποίηση με το <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\">Σημείωση</p>\n<p>Η χρήση του <code class=\"docutils literal notranslate\"><span class=\"pre\">WSGIApplicationGroup</span> <span class=\"pre\">%{GLOBAL}</span></code> στις παραμετροποιήσεις παρακάτω, προϋποθέτει ότι το δικό σας instance του Apache τρέχει μόνο μια Django εφαρμογή. Αν τρέχετε παραπάνω από μια Django εφαρμογές, παρακαλούμε ανατρέξτε στην ενότητα <a class=\"reference external\" href=\"https://modwsgi.readthedocs.io/en/develop/user-guides/configuration-guidelines.html#defining-application-groups\">Defining Application Groups</a> του εγχειριδίου του mod_wsgi για περισσότερες πληροφορίες σχετικά με αυτή τη ρύθμιση.</p>\n</aside>\n<p>Make sure that mod_wsgi is installed and activated and that you have\nfollowed the steps to set up <a class=\"reference internal\" href=\"/el/5.1/howto/deployment/wsgi/modwsgi/\"><span class=\"doc\">Apache with mod_wsgi</span></a>.</p>\n<p>Επόμενο βήμα είναι να επεξεργαστείτε τον Apache server σας για να προσθέσετε μια τοποθεσία (location) όπου μόνο οι πιστοποιημένοι χρήστες θα μπορούν να βλέπουν:</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>Το directive <code class=\"docutils literal notranslate\"><span class=\"pre\">WSGIAuthUserScript</span></code> λέει στο mod_wsgi να εκτελέσει τη συνάρτηση <code class=\"docutils literal notranslate\"><span class=\"pre\">check_password</span></code> στο προσδιορισμένο wsgi script, περνώντας το user name και το password το οποίο λαμβάνει από την είσοδο (πχ κονσόλα). Σε αυτό το παράδειγμα, το <code class=\"docutils literal notranslate\"><span class=\"pre\">WSGIAuthUserScript</span></code> είναι το ίδιο με το <code class=\"docutils literal notranslate\"><span class=\"pre\">WSGIScriptAlias</span></code> που ορίζει την εφαρμογή σας <a class=\"reference internal\" href=\"/el/5.1/howto/deployment/wsgi/\"><span class=\"doc\">η οποία δημιουργήθηκε με την εντολή django-admin startproject</span></a>.</p>\n<aside class=\"admonition-using-apache-2-2-with-authentication admonition\">\n<p class=\"admonition-title\">Χρησιμοποιώντας τον Apache 2.2 με πιστοποίηση</p>\n<p>Σιγουρευτείτε ότι τα modules <code class=\"docutils literal notranslate\"><span class=\"pre\">mod_auth_basic</span></code> και <code class=\"docutils literal notranslate\"><span class=\"pre\">mod_authz_user</span></code> είναι φορτωμένα.</p>\n<p>Αυτά τα modules θα μπορούσαν να συγκεντρωθούν στατικά μέσα στον Apache ή θα μπορούσατε να χρησιμοποιήσετε το LoadModule για να τα φορτώσετε δυναμικά μέσα στο αρχείο <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>Τέλος, επεξεργαστείτε το WSGI script σας <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite.wsgi</span></code> για να συνδέσετε την πιστοποίηση του Apache με τους μηχανισμούς πιστοποίησης του site σας, κάνοντας importing τη συνάρτηση <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>Πλέον, τα requests που θα αρχίζουν με <code class=\"docutils literal notranslate\"><span class=\"pre\">/secret/</span></code> θα απαιτούν πιστοποίηση από τον χρήστη.</p>\n<p>Το mod_wsgi <a class=\"reference external\" href=\"https://modwsgi.readthedocs.io/en/develop/user-guides/access-control-mechanisms.html\">access control mechanisms documentation</a> παρέχει επιπρόσθετες λεπτομέρειες και πληροφορίες σχετικά με εναλλακτικές μεθόδους πιστοποίησης.</p>\n<section id=\"authorization-with-mod-wsgi-and-django-groups\">\n<h3>Πιστοποίηση με το <code class=\"docutils literal notranslate\"><span class=\"pre\">mod_wsgi</span></code> και τις ομάδες του 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 προσφέρει, επίσης, τη δυνατότητα να απαγορεύει την είσοδο σε μια συγκεκριμένη τοποθεσία για κάποια μέλη μιας ομάδας.</p>\n<p>Σε αυτή την περίπτωση, ο Apache server σας θα πρέπει να δείχνει κάπως έτσι:</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>Για την υποστήριξη του directive <code class=\"docutils literal notranslate\"><span class=\"pre\">WSGIAuthGroupScript</span></code>, το ίδιο WSGI script <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite.wsgi</span></code> πρέπει να κάνει import τη συνάρτηση <code class=\"docutils literal notranslate\"><span class=\"pre\">groups_for_user</span></code> η οποία επιστρέφει μια λίστα από ομάδες στις οποίες ανήκει ο συγκεκριμένος χρήστης.</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>Πλέον, τα requests που θα ξεκινούν με <code class=\"docutils literal notranslate\"><span class=\"pre\">/secret/</span></code> θα απαιτούν, επίσης, από τον χρήστη να είναι μέλος της ομάδας με το όνομα «secret-agents».</p>\n</section>\n</section>","rootId":"how-to-authenticate-against-django-s-user-database-from-apache","toc":[{"title":"Πιστοποίηση με το mod_wsgi","anchor":"authentication-with-mod-wsgi","children":[{"title":"Πιστοποίηση με το mod_wsgi και τις ομάδες του Django","anchor":"authorization-with-mod-wsgi-and-django-groups","children":[]}]}],"breadcrumbs":[{"docname":"howto/index","title":"How-to guides","url":"/el/5.1/howto/"},{"docname":"howto/deployment/index","title":"How to deploy Django","url":"/el/5.1/howto/deployment/"},{"docname":"howto/deployment/wsgi/index","title":"Πως να ανεβάσετε το site σας χρησιμοποιώντας το WSGI","url":"/el/5.1/howto/deployment/wsgi/"}],"prev":{"docname":"howto/deployment/wsgi/modwsgi","title":"Πως να χρησιμοποιήσετε το Django με τον Apache και το mod_wsgi","url":"/el/5.1/howto/deployment/wsgi/modwsgi/"},"next":{"docname":"howto/deployment/asgi/index","title":"How to deploy with ASGI","url":"/el/5.1/howto/deployment/asgi/"},"formats":{"html":"/el/5.1/howto/deployment/wsgi/apache-auth/","markdown":"/el/5.1/howto/deployment/wsgi/apache-auth.md","json":"/el/5.1/howto/deployment/wsgi/apache-auth.json"},"source":"https://github.com/django/django/blob/stable/5.1.x/docs/howto/deployment/wsgi/apache-auth.txt","official":"https://docs.djangoproject.com/el/5.1/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"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}