How to authenticate against Django’s user database from ApacheLink to this heading

Επειδή το να συγχρονίζετε πολλές πιστοποιημένες βάσεις δεδομένων είναι κοινό πρόβλημα, μπορείτε να παραμετροποιήσετε τον Apache ούτως ώστε να πιστοποιήσει εκείνος απ’ ευθείας το σύστημα πιστοποίησης του Django. Αυτό απαιτεί έκδοση του Apache >= 2.2 και mod_wsgi >= 2.0. Για παράδειγμα, θα μπορούσατε να:

  • Εξυπηρετήσετε τα static/media αρχεία απ’ ευθείας από τον Apache, μόνο σε πιστοποιημένους χρήστες.

  • Πιστοποιήσετε την πρόσβαση σε ένα Subversion repository για χρήστες του Django με συγκεκριμένα δικαιώματα.

  • Επιτρέπετε σε συγκεκριμένους χρήστες να συνδεθούν σε ένα κοινόχρηστο WebDAV με το mod_dav.

Πιστοποίηση με το mod_wsgiLink to this heading

Make sure that mod_wsgi is installed and activated and that you have followed the steps to set up Apache with mod_wsgi.

Επόμενο βήμα είναι να επεξεργαστείτε τον Apache server σας για να προσθέσετε μια τοποθεσία (location) όπου μόνο οι πιστοποιημένοι χρήστες θα μπορούν να βλέπουν:

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>

Το directive WSGIAuthUserScript λέει στο mod_wsgi να εκτελέσει τη συνάρτηση check_password στο προσδιορισμένο wsgi script, περνώντας το user name και το password το οποίο λαμβάνει από την είσοδο (πχ κονσόλα). Σε αυτό το παράδειγμα, το WSGIAuthUserScript είναι το ίδιο με το WSGIScriptAlias που ορίζει την εφαρμογή σας η οποία δημιουργήθηκε με την εντολή django-admin startproject.

Τέλος, επεξεργαστείτε το WSGI script σας mysite.wsgi για να συνδέσετε την πιστοποίηση του Apache με τους μηχανισμούς πιστοποίησης του site σας, κάνοντας importing τη συνάρτηση 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()

Πλέον, τα requests που θα αρχίζουν με /secret/ θα απαιτούν πιστοποίηση από τον χρήστη.

Το mod_wsgi access control mechanisms documentation παρέχει επιπρόσθετες λεπτομέρειες και πληροφορίες σχετικά με εναλλακτικές μεθόδους πιστοποίησης.

Πιστοποίηση με το mod_wsgi και τις ομάδες του DjangoLink to this heading

Το mod_wsgi προσφέρει, επίσης, τη δυνατότητα να απαγορεύει την είσοδο σε μια συγκεκριμένη τοποθεσία για κάποια μέλη μιας ομάδας.

Σε αυτή την περίπτωση, ο Apache server σας θα πρέπει να δείχνει κάπως έτσι:

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>

Για την υποστήριξη του directive WSGIAuthGroupScript, το ίδιο WSGI script mysite.wsgi πρέπει να κάνει import τη συνάρτηση groups_for_user η οποία επιστρέφει μια λίστα από ομάδες στις οποίες ανήκει ο συγκεκριμένος χρήστης.

Python
from django.contrib.auth.handlers.modwsgi import check_password, groups_for_user

Πλέον, τα requests που θα ξεκινούν με /secret/ θα απαιτούν, επίσης, από τον χρήστη να είναι μέλος της ομάδας με το όνομα «secret-agents».