---
title: "Πιστοποίηση της βάσης δεδομένων ενός Django χρήστη μέσω Apache"
version: 3.2
locale: el
source: https://docs.djangoproject.com/el/3.2/howto/deployment/wsgi/apache-auth/
canonical: https://djangodocs.dev/el/3.2/howto/deployment/wsgi/apache-auth/
---
# Πιστοποίηση της βάσης δεδομένων ενός Django χρήστη μέσω Apache

Επειδή το να συγχρονίζετε πολλές πιστοποιημένες βάσεις δεδομένων είναι κοινό πρόβλημα, μπορείτε να παραμετροποιήσετε τον Apache ούτως ώστε να πιστοποιήσει εκείνος απ’ ευθείας το [σύστημα πιστοποίησης](/el/3.2/topics/auth/) του Django. Αυτό απαιτεί έκδοση του Apache \>= 2.2 και mod\_wsgi \>= 2.0. Για παράδειγμα, θα μπορούσατε να:

- Εξυπηρετήσετε τα static/media αρχεία απ’ ευθείας από τον Apache, μόνο σε πιστοποιημένους χρήστες.
- Πιστοποιήσετε την πρόσβαση σε ένα [Subversion](https://subversion.apache.org/) repository για χρήστες του Django με συγκεκριμένα δικαιώματα.
- Επιτρέπετε σε συγκεκριμένους χρήστες να συνδεθούν σε ένα κοινόχρηστο WebDAV με το [mod\_dav](https://httpd.apache.org/docs/2.2/mod/mod_dav.html).

> **Note**
>
> Αν έχετε εγκαταστήσει κάποιο [δικό σας user model](/el/3.2/topics/auth/customizing/#auth-custom-user) και θέλετε να χρησιμοποιήσετε τον προεπιλεγμένο auth handler, τότε το δικό σας user model θα πρέπει να υποστηρίζει το attribute `is_active`. Αν θέλετε να χρησιμοποιήσετε την πιστοποίηση βάση ρόλων (group based authorization), τότε το δικό σας user model θα πρέπει να έχει μια συσχέτιση (relation) με το όνομα “groups”, η οποία θα αναφέρεται σε κάποιο object το οποίο θα πρέπει να έχει ένα πεδίο με το όνομα “name”. Μπορείτε, επίσης, να καθορίσετε τον δικό σας mod\_wsgi auth handler αν βεβαίως δεν μπορείτε να συμβιβαστείτε με τις παραπάνω προϋποθέσεις.

## Πιστοποίηση με το `mod_wsgi`

> **Note**
>
> Η χρήση του `WSGIApplicationGroup %{GLOBAL}` στις παραμετροποιήσεις παρακάτω, προϋποθέτει ότι το δικό σας instance του Apache τρέχει μόνο μια Django εφαρμογή. Αν τρέχετε παραπάνω από μια Django εφαρμογές, παρακαλούμε ανατρέξτε στην ενότητα [Defining Application Groups](https://modwsgi.readthedocs.io/en/develop/user-guides/configuration-guidelines.html#defining-application-groups) του εγχειριδίου του mod\_wsgi για περισσότερες πληροφορίες σχετικά με αυτή τη ρύθμιση.

Σιγουρευτείτε ότι το mod\_wsgi είναι εγκατεστημένο, ενεργοποιημένο και έχετε ακολουθήσει τα βήματα για να εγκαταστήσετε το [Apache με το mod\_wsgi](/el/3.2/howto/deployment/wsgi/modwsgi/).

Επόμενο βήμα είναι να επεξεργαστείτε τον 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](/el/3.2/howto/deployment/wsgi/).

> **Χρησιμοποιώντας τον Apache 2.2 με πιστοποίηση**
>
> Σιγουρευτείτε ότι τα modules `mod_auth_basic` και `mod_authz_user` είναι φορτωμένα.
>
> Αυτά τα modules θα μπορούσαν να συγκεντρωθούν στατικά μέσα στον Apache ή θα μπορούσατε να χρησιμοποιήσετε το LoadModule για να τα φορτώσετε δυναμικά μέσα στο αρχείο `httpd.conf`:
>
> ```apache
> LoadModule auth_basic_module modules/mod_auth_basic.so
> LoadModule authz_user_module modules/mod_authz_user.so
> ```

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

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

Το mod\_wsgi [access control mechanisms documentation](https://modwsgi.readthedocs.io/en/develop/user-guides/access-control-mechanisms.html) παρέχει επιπρόσθετες λεπτομέρειες και πληροφορίες σχετικά με εναλλακτικές μεθόδους πιστοποίησης.

### Πιστοποίηση με το `mod_wsgi` και τις ομάδες του Django

Το 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».
