---
title: "How to authenticate against Django’s user database from Apache"
version: 6.1
locale: el
source: https://docs.djangoproject.com/el/6.1/howto/deployment/wsgi/apache-auth/
canonical: https://djangodocs.dev/el/6.1/howto/deployment/wsgi/apache-auth/
---
# How to authenticate against Django’s user database from Apache

Since keeping multiple authentication databases in sync is a common problem
when dealing with Apache, you can configure Apache to authenticate against
Django’s [authentication system](/el/6.1/topics/auth/) directly. This
requires Apache version \>= 2.2 and `mod_wsgi` \>= 2.0. For example, you could:

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

> **Note**
>
> Αν έχετε εγκαταστήσει κάποιο [δικό σας user model](/el/6.1/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 για περισσότερες πληροφορίες σχετικά με αυτή τη ρύθμιση.

Make sure that mod\_wsgi is installed and activated and that you have
followed the steps to set up [Apache with mod\_wsgi](/el/6.1/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/6.1/howto/deployment/wsgi/).

> **Using Apache 2.2+ with authentication**
>
> Σιγουρευτείτε ότι τα 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>
```

To support the `WSGIAuthGroupScript` directive, the same WSGI script
`mysite.wsgi` must also import the `groups_for_user` function which
returns a list of groups the given user belongs to.

```python
from django.contrib.auth.handlers.modwsgi import check_password, groups_for_user
```

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