{"title":"Hur man autentiserar med hjälp av REMOTE_USER","version":"5.2","locale":"sv","docname":"howto/auth-remote-user","url":"/sv/5.2/howto/auth-remote-user/","canonical":"https://djangodocs.dev/sv/5.2/howto/auth-remote-user/","summary":"Detta dokument beskriver hur man använder externa autentiseringskällor (där webbservern ställer in miljövariabeln REMOTE_USER ) i dina Django-applikationer. Den här…","html":"<h1>Hur man autentiserar med hjälp av <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code><a class=\"heading-anchor\" href=\"#how-to-authenticate-using-remote-user\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Detta dokument beskriver hur man använder externa autentiseringskällor (där webbservern ställer in miljövariabeln <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code>) i dina Django-applikationer.  Den här typen av autentiseringslösning används vanligtvis på intranätplatser, med lösningar för enkel inloggning som IIS och Integrated Windows Authentication eller Apache och <a class=\"reference external\" href=\"https://httpd.apache.org/docs/current/mod/mod_authnz_ldap.html\">mod_authnz_ldap</a>, <a class=\"reference external\" href=\"https://www.apereo.org/projects/cas\">CAS</a>, <a class=\"reference external\" href=\"https://uit.stanford.edu/service/authentication\">WebAuth</a>, <a class=\"reference external\" href=\"https://sourceforge.net/projects/mod-auth-sspi\">mod_auth_sspi</a>, etc.</p>\n<p>När webbservern tar hand om autentisering ställer den vanligtvis in miljövariabeln <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code> för användning i den underliggande applikationen.  I Django görs <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code> tillgänglig i attributet <a class=\"reference internal\" href=\"/sv/5.2/ref/request-response/#django.http.HttpRequest.META\" title=\"django.http.HttpRequest.META\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">request.META</span></code></a>.  Django kan konfigureras för att använda värdet <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code> med hjälp av <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">PersistentRemoteUserMiddleware</span></code> och <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend\" title=\"django.contrib.auth.backends.RemoteUserBackend\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RemoteUserBackend</span></code></a>-klasserna som finns i <a class=\"reference internal\" href=\"/sv/5.2/topics/auth/#module-django.contrib.auth\" title=\"django.contrib.auth: Django's authentication framework.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.auth</span></code></a>.</p>\n<section id=\"configuration\">\n<h2>Konfiguration<a class=\"heading-anchor\" href=\"#configuration\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Först måste du lägga till <a class=\"reference internal\" href=\"/sv/5.2/ref/middleware/#django.contrib.auth.middleware.RemoteUserMiddleware\" title=\"django.contrib.auth.middleware.RemoteUserMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.middleware.RemoteUserMiddleware</span></code></a> i inställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> <strong>efter</strong> <a class=\"reference internal\" href=\"/sv/5.2/ref/middleware/#django.contrib.auth.middleware.AuthenticationMiddleware\" title=\"django.contrib.auth.middleware.AuthenticationMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.middleware.AuthenticationMiddleware</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">MIDDLEWARE</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s2\">&quot;...&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.middleware.AuthenticationMiddleware&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.middleware.RemoteUserMiddleware&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;...&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Därefter måste du ersätta <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.backends.ModelBackend\" title=\"django.contrib.auth.backends.ModelBackend\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelBackend</span></code></a> med <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend\" title=\"django.contrib.auth.backends.RemoteUserBackend\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RemoteUserBackend</span></code></a> i inställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-AUTHENTICATION_BACKENDS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">AUTHENTICATION_BACKENDS</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">AUTHENTICATION_BACKENDS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s2\">&quot;django.contrib.auth.backends.RemoteUserBackend&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Med denna inställning kommer <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code> att upptäcka användarnamnet i <code class=\"docutils literal notranslate\"><span class=\"pre\">request.META['REMOTE_USER']</span></code> och autentisera och automatiskt logga in den användaren med hjälp av <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend\" title=\"django.contrib.auth.backends.RemoteUserBackend\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RemoteUserBackend</span></code></a>.</p>\n<p>Var medveten om att just denna inställning inaktiverar autentisering med standard <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelBackend</span></code>. Detta innebär att om värdet <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code> 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 <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.auth.backends.ModelBackend'</span></code> i listan <code class=\"docutils literal notranslate\"><span class=\"pre\">AUTHENTICATION_BACKENDS</span></code> kommer <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelBackend</span></code> att användas som reserv om <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code> saknas, vilket kommer att lösa dessa problem.</p>\n<p>Djangos användarhantering, till exempel vyerna i <code class=\"docutils literal notranslate\"><span class=\"pre\">contrib.admin</span></code> och kommandot <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-createsuperuser\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">createsuperuser</span></code></a>, integreras inte med fjärranvändare. Dessa gränssnitt fungerar med användare som är lagrade i databasen oavsett <code class=\"docutils literal notranslate\"><span class=\"pre\">AUTHENTICATION_BACKENDS</span></code>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Eftersom <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserBackend</span></code> ärver från <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelBackend</span></code> kommer du fortfarande att ha samma behörighetskontroll som implementeras i <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelBackend</span></code>.</p>\n<p>Användare med <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User.is_active\" title=\"django.contrib.auth.models.User.is_active\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">is_active=False</span></code></a> tillåts inte att autentisera sig. Använd <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.backends.AllowAllUsersRemoteUserBackend\" title=\"django.contrib.auth.backends.AllowAllUsersRemoteUserBackend\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AllowAllUsersRemoteUserBackend</span></code></a> om du vill tillåta dem att göra det.</p>\n</aside>\n<p>Om din autentiseringsmekanism använder en anpassad HTTP-header och inte <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code>, kan du subklassa <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code> och ställa in attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">header</span></code> till önskad <code class=\"docutils literal notranslate\"><span class=\"pre\">request.META</span></code>-nyckel.  Till exempel:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">mysite/middleware.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code> <span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.middleware</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">RemoteUserMiddleware</span>\n\n\n <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CustomHeaderRemoteUserMiddleware</span><span class=\"p\">(</span><span class=\"n\">RemoteUserMiddleware</span><span class=\"p\">):</span>\n     <span class=\"n\">header</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;HTTP_AUTHUSER&quot;</span>\n</code></pre></figure>\n<p>Denna anpassade middleware används sedan i inställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> istället för <a class=\"reference internal\" href=\"/sv/5.2/ref/middleware/#django.contrib.auth.middleware.RemoteUserMiddleware\" title=\"django.contrib.auth.middleware.RemoteUserMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.middleware.RemoteUserMiddleware</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">MIDDLEWARE</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s2\">&quot;...&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.middleware.AuthenticationMiddleware&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;mysite.middleware.CustomHeaderRemoteUserMiddleware&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;...&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Var mycket försiktig om du använder en <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code>-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 <code class=\"docutils literal notranslate\"><span class=\"pre\">X-Auth-User</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">X-Auth_User</span></code> (till exempel) båda normaliseras till nyckeln <code class=\"docutils literal notranslate\"><span class=\"pre\">HTTP_X_AUTH_USER</span></code> i <code class=\"docutils literal notranslate\"><span class=\"pre\">request.META</span></code>, 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.</p>\n<p>Denna varning gäller inte för <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code> i dess standardkonfiguration med <code class=\"docutils literal notranslate\"><span class=\"pre\">header</span> <span class=\"pre\">=</span> <span class=\"pre\">'REMOTE_USER'</span></code>, eftersom en nyckel som inte börjar med <code class=\"docutils literal notranslate\"><span class=\"pre\">HTTP_</span></code> i <code class=\"docutils literal notranslate\"><span class=\"pre\">request.META</span></code> endast kan ställas in av din WSGI-server, inte direkt från en HTTP-förfrågningsrubrik.</p>\n</aside>\n<p>Om du behöver mer kontroll kan du skapa din egen autentiseringsbackend som ärver från <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend\" title=\"django.contrib.auth.backends.RemoteUserBackend\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RemoteUserBackend</span></code></a> och åsidosätta ett eller flera av dess attribut och metoder.</p>\n</section>\n<section id=\"using-remote-user-on-login-pages-only\">\n<span id=\"persistent-remote-user-middleware-howto\"></span><h2>Använda <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code> endast på inloggningssidor<a class=\"heading-anchor\" href=\"#using-remote-user-on-login-pages-only\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Autentiseringsmellanvaran <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code> förutsätter att HTTP-förfrågningshuvudet <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code> finns med i alla autentiserade förfrågningar. Detta kan vara förväntat och praktiskt när grundläggande HTTP-autentisering med <code class=\"docutils literal notranslate\"><span class=\"pre\">htpasswd</span></code> 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.</p>\n<p><a class=\"reference internal\" href=\"/sv/5.2/ref/middleware/#django.contrib.auth.middleware.PersistentRemoteUserMiddleware\" title=\"django.contrib.auth.middleware.PersistentRemoteUserMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">PersistentRemoteUserMiddleware</span></code></a> 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 <a class=\"reference internal\" href=\"/sv/5.2/ref/middleware/#django.contrib.auth.middleware.RemoteUserMiddleware\" title=\"django.contrib.auth.middleware.RemoteUserMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code></a> i dokumentationen ovan.</p>\n</section>","rootId":"how-to-authenticate-using-remote-user","toc":[{"title":"Konfiguration","anchor":"configuration","children":[]},{"title":"Använda REMOTE_USER endast på inloggningssidor","anchor":"using-remote-user-on-login-pages-only","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"Hur man gör-guider","url":"/sv/5.2/howto/"}],"prev":{"docname":"howto/static-files/deployment","title":"Så här distribuerar du statiska filer","url":"/sv/5.2/howto/static-files/deployment/"},"next":{"docname":"howto/csrf","title":"Så här använder du Djangos CSRF-skydd","url":"/sv/5.2/howto/csrf/"},"formats":{"html":"/sv/5.2/howto/auth-remote-user/","markdown":"/sv/5.2/howto/auth-remote-user.md","json":"/sv/5.2/howto/auth-remote-user.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/howto/auth-remote-user.txt","official":"https://docs.djangoproject.com/sv/5.2/howto/auth-remote-user/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}