---
title: "How to authenticate using REMOTE_USER"
version: 6.0
locale: el
source: https://docs.djangoproject.com/el/6.0/howto/auth-remote-user/
canonical: https://djangodocs.dev/el/6.0/howto/auth-remote-user/
---
# How to authenticate using `REMOTE_USER`

This document describes how to make use of external authentication sources in
your Django applications. This type of authentication solution is typically
seen on intranet sites, with single sign-on solutions such as IIS and
Integrated Windows Authentication or Apache and [mod\_authnz\_ldap](https://httpd.apache.org/docs/current/mod/mod_authnz_ldap.html), [CAS](https://www.apereo.org/projects/cas),
[WebAuth](https://uit.stanford.edu/service/authentication), [mod\_auth\_sspi](https://sourceforge.net/projects/mod-auth-sspi), etc.

When the web server takes care of authentication it typically provides the
authenticated user as `REMOTE_USER`. In Django, this value is made available
in [`request.META`](/el/6.0/ref/request-response/#django.http.HttpRequest.META) (as `REMOTE_USER` when
supplied as an environment variable, as in WSGI, or `HTTP_REMOTE_USER` when
supplied via an HTTP header, as in ASGI). Django can be configured to make use
of the `REMOTE_USER` value using the `RemoteUserMiddleware` or
`PersistentRemoteUserMiddleware`, and
[`RemoteUserBackend`](/el/6.0/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend) classes found in
[`django.contrib.auth`](/el/6.0/topics/auth/#module-django.contrib.auth).

## Παραμετροποίηση

Πρώτα πρέπει να προσθέσετε τη middleware κλάση [`django.contrib.auth.middleware.RemoteUserMiddleware`](/el/6.0/ref/middleware/#django.contrib.auth.middleware.RemoteUserMiddleware) στη ρύθμιση [`MIDDLEWARE`](/el/6.0/ref/settings/#std-setting-MIDDLEWARE) **μετά** τη middleware κλάση [`django.contrib.auth.middleware.AuthenticationMiddleware`](/el/6.0/ref/middleware/#django.contrib.auth.middleware.AuthenticationMiddleware):

```
MIDDLEWARE = [
    "...",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.auth.middleware.RemoteUserMiddleware",
    "...",
]
```

Κατόπιν, πρέπει να αντικαταστήσετε την κλάση [`ModelBackend`](/el/6.0/ref/contrib/auth/#django.contrib.auth.backends.ModelBackend) με την [`RemoteUserBackend`](/el/6.0/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend) μέσα στη ρύθμιση [`AUTHENTICATION_BACKENDS`](/el/6.0/ref/settings/#std-setting-AUTHENTICATION_BACKENDS):

```
AUTHENTICATION_BACKENDS = [
    "django.contrib.auth.backends.RemoteUserBackend",
]
```

With this setup, `RemoteUserMiddleware` will detect the username in
`request.META['REMOTE_USER']` (or `request.META['HTTP_REMOTE_USER']` under
ASGI) and will authenticate and auto-login that user
using the [`RemoteUserBackend`](/el/6.0/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend).

Ιδιαίτερη προσοχή πρέπει να δοθεί στο γεγονός ότι η ανωτέρω συγκεκριμένη ρύθμιση απενεργοποιεί την πιστοποίηση του, προεπιλεγμένου, `ModelBackend`. Αυτό σημαίνει ότι αν η τιμή της μεταβλητής `REMOTE_USER` δεν έχει οριστεί, τότε ο χρήστης δεν θα μπορεί να κάνει log in στο σύστημα, ακόμη και αν χρησιμοποιεί το interface του Django admin. Για την επίλυση αυτού, απλώς προσθέστε το `'django.contrib.auth.backends.ModelBackend'` στη λίστα `AUTHENTICATION_BACKENDS`. Με αυτό τον τρόπο το Django θα χρησιμοποιήσει το `ModelBackend` ως fallback αν το `REMOTE_USER` δεν έχει οριστεί.

Η διαχείριση των χρηστών του Django, όπως τα views μέσα στο `contrib.admin` και η εντολή [`createsuperuser`](/el/6.0/ref/django-admin/#django-admin-createsuperuser), δεν δουλεύουν με τους απομακρυσμένους χρήστες (remote users). Αυτά τα interfaces δουλεύουν με τους χρήστες οι οποίοι είναι αποθηκευμένοι στην βάση δεδομένων ανεξαρτήτως της ρύθμισης `AUTHENTICATION_BACKENDS`.

> **Note**
>
> Επειδή η κλάση `RemoteUserBackend` κληρονομεί από την `ModelBackend`, θα έχετε στην διάθεση σας όλο το API, που είναι υλοποιημένο στο `ModelBackend` και αφορά τον έλεγχο δικαιωμάτων των χρηστών.
>
> Οι χρήστες με το attribute [`is_active=False`](/el/6.0/ref/contrib/auth/#django.contrib.auth.models.User.is_active) δεν θα τους επιτραπεί να πιστοποιηθούν. Για να το παρακάμψετε αυτό χρησιμοποιήστε την κλάση [`AllowAllUsersRemoteUserBackend`](/el/6.0/ref/contrib/auth/#django.contrib.auth.backends.AllowAllUsersRemoteUserBackend).

If your authentication mechanism uses a custom HTTP header and not
`REMOTE_USER`, you can subclass `RemoteUserMiddleware` and set the
`header` attribute to the desired `request.META` key. For example:

*`mysite/middleware.py`*

```python
 from django.contrib.auth.middleware import RemoteUserMiddleware

 class CustomHeaderRemoteUserMiddleware(RemoteUserMiddleware):
     header = "HTTP_AUTHUSER"
```

This custom middleware is then used in the [`MIDDLEWARE`](/el/6.0/ref/settings/#std-setting-MIDDLEWARE) setting
instead of [`django.contrib.auth.middleware.RemoteUserMiddleware`](/el/6.0/ref/middleware/#django.contrib.auth.middleware.RemoteUserMiddleware):

```
MIDDLEWARE = [
    "...",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "mysite.middleware.CustomHeaderRemoteUserMiddleware",
    "...",
]
```

> **Warning**
>
> `RemoteUserMiddleware` must not be deployed in configurations where a
> client can supply the header. You must be sure that your web server or
> reverse proxy always sets or strips that header based on the appropriate
> authentication checks, never permitting an end user to submit a fake (or
> «spoofed») header value.
>
> Since the HTTP headers `X-Auth-User` and `X-Auth_User` (for example)
> both normalize to the `HTTP_X_AUTH_USER` key in `request.META`, you
> must also check that your web server doesn’t allow a spoofed header using
> underscores in place of dashes.
>
> Under WSGI, this warning doesn’t apply to `RemoteUserMiddleware` in its
> default configuration with `header = "REMOTE_USER"`, since a key that
> doesn’t start with `HTTP_` in `request.META` can only be set by your
> WSGI server, not directly from an HTTP request header.
>
> This warning applies under ASGI in all configurations, because there is
> no equivalent for a WSGI server’s ability to place a trusted value in the
> environ. ASGI deployments *must* use a reverse proxy as described above
> when using this middleware.

Αν χρειάζεστε περισσότερο έλεγχο, μπορείτε να δημιουργήσετε το δικό σας backend πιστοποίησης ο οποίος θα κληρονομεί από την κλάση [`RemoteUserBackend`](/el/6.0/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend) και θα παρακάμπτει (override) ένα ή περισσότερα από τα attributes και τις μεθόδους της.

## Χρήση του `REMOTE_USER` μόνο στις σελίδες login

The `RemoteUserMiddleware` authentication middleware assumes that the HTTP
request header `REMOTE_USER` is present with all authenticated requests. That
might be expected and practical when Basic HTTP Auth with `htpasswd` or
similar mechanisms are used, but with Negotiate (GSSAPI/Kerberos) or other
resource intensive authentication methods, the authentication in the front-end
HTTP server is usually only set up for one or a few login URLs, and after
successful authentication, the application is supposed to maintain the
authenticated session itself.

Η middleware κλάση [`PersistentRemoteUserMiddleware`](/el/6.0/ref/middleware/#django.contrib.auth.middleware.PersistentRemoteUserMiddleware) παρέχει υποστήριξη για αυτήν ακριβώς την περίπτωση. Θα διατηρήσει το πιστοποιημένο session μέχρις ότου ο χρήστης κάνει logout ο ίδιος. Η κλάση μπορεί να χρησιμοποιηθεί ως αντικατάσταση της [`RemoteUserMiddleware`](/el/6.0/ref/middleware/#django.contrib.auth.middleware.RemoteUserMiddleware) όπως αναφέρθηκε παραπάνω.
