# Django 5.2.8 documentation

# Hur man autentiserar med hjälp av `REMOTE_USER`

This document describes how to make use of external authentication sources (where the web server sets the `REMOTE_USER` environment variable) 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, CAS, WebAuth, mod_auth_sspi, etc.

When the web server takes care of authentication it typically sets the `REMOTE_USER` environment variable for use in the underlying application. In Django, `REMOTE_USER` is made available in the `request.META` attribute. Django can be configured to make use of the `REMOTE_USER` value using the `RemoteUserMiddleware` or `PersistentRemoteUserMiddleware`, and `RemoteUserBackend` classes found in `django.contrib.auth`.

## Konfiguration

Först måste du lägga till `django.contrib.auth.middleware.RemoteUserMiddleware` i inställningen `MIDDLEWARE` efter `django.contrib.auth.middleware.AuthenticationMiddleware`:

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

Därefter måste du ersätta `ModelBackend` med `RemoteUserBackend` i inställningen `AUTHENTICATION_BACKENDS`:

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

Med denna inställning kommer `RemoteUserMiddleware` att upptäcka användarnamnet i `request.META['REMOTE_USER']` och autentisera och automatiskt logga in den användaren med hjälp av `RemoteUserBackend`.

Var medveten om att just denna inställning inaktiverar autentisering med standard `ModelBackend`. Detta innebär att om värdet `REMOTE_USER` inte är inställt kan användaren inte logga in, inte ens med hjälp av Djangos administratörsgränssnitt. Genom att lägga till `'django.contrib.auth.backends.ModelBackend'` i listan `AUTHENTICATION_BACKENDS` kommer `ModelBackend` att användas som reserv om `REMOTE_USER` saknas, vilket kommer att lösa dessa problem.

Djangos användarhantering, till exempel vyerna i `contrib.admin` och kommandot `createsuperuser`, integreras inte med fjärranvändare. Dessa gränssnitt fungerar med användare som är lagrade i databasen oavsett `AUTHENTICATION_BACKENDS`.

Observera

Eftersom `RemoteUserBackend` ärver från `ModelBackend` kommer du fortfarande att ha samma behörighetskontroll som implementeras i `ModelBackend`.

Användare med `is_active=False` tillåts inte att autentisera sig. Använd `AllowAllUsersRemoteUserBackend` om du vill tillåta dem att göra det.

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`

     from django.contrib.auth.middleware import RemoteUserMiddleware

     class CustomHeaderRemoteUserMiddleware(RemoteUserMiddleware):
         header = "HTTP_AUTHUSER"

Denna anpassade middleware används sedan i inställningen `MIDDLEWARE` istället för `django.contrib.auth.middleware.RemoteUserMiddleware`:

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

Varning

Var mycket försiktig om du använder en `RemoteUserMiddleware`-underklass med en anpassad HTTP-header. Du måste vara säker på att webbservern i frontend alltid ställer in eller tar bort rubriken baserat på lämpliga autentiseringskontroller och aldrig tillåter en slutanvändare att skicka in ett falskt (eller ”spoofat”) rubrikvärde. Eftersom HTTP-rubrikerna `X-Auth-User` och `X-Auth_User` (till exempel) båda normaliseras till nyckeln `HTTP_X_AUTH_USER` i `request.META`, måste du också kontrollera att din webbserver inte tillåter en förfalskad rubrik som använder understreck i stället för bindestreck.

Denna varning gäller inte för `RemoteUserMiddleware` i dess standardkonfiguration med `header = 'REMOTE_USER'`, eftersom en nyckel som inte börjar med `HTTP_` i `request.META` endast kan ställas in av din WSGI-server, inte direkt från en HTTP-förfrågningsrubrik.

Om du behöver mer kontroll kan du skapa din egen autentiseringsbackend som ärver från `RemoteUserBackend` och åsidosätta ett eller flera av dess attribut och metoder.

## Använda `REMOTE_USER` endast på inloggningssidor

Autentiseringsmellanvaran `RemoteUserMiddleware` förutsätter att HTTP-förfrågningshuvudet `REMOTE_USER` finns med i alla autentiserade förfrågningar. Detta kan vara förväntat och praktiskt när grundläggande HTTP-autentisering med `htpasswd` eller liknande mekanismer används, men med Negotiate (GSSAPI/Kerberos) eller andra resurskrävande autentiseringsmetoder konfigureras autentiseringen i HTTP-frontservern vanligtvis bara för en eller ett fåtal inloggningsadresser, och efter en lyckad autentisering är det meningen att applikationen själv ska upprätthålla den autentiserade sessionen.

`PersistentRemoteUserMiddleware` ger stöd för detta användningsfall. Den kommer att behålla den autentiserade sessionen tills användaren uttryckligen loggar ut. Klassen kan användas som en drop-in-ersättning av `RemoteUserMiddleware` i dokumentationen ovan.