{"title":"Hur man autentiserar med hjälp av REMOTE_USER","version":"6.1","locale":"sv","docname":"howto/auth-remote-user","url":"/sv/6.1/howto/auth-remote-user/","canonical":"https://djangodocs.dev/sv/6.1/howto/auth-remote-user/","summary":"Det här dokumentet beskriver hur du använder externa autentiseringskällor i dina Django-applikationer.","html":"<h1>Hur man autentiserar med hjälp av <code class=\"docutils literal notranslate\">REMOTE_USER</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>Det här dokumentet beskriver hur du använder externa autentiseringskällor i dina Django-applikationer. Den här typen av autentiseringslösning förekommer vanligtvis på intranät med 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> med flera.</p>\n<p>När webbservern hanterar autentisering tillhandahåller den vanligtvis den autentiserade användaren som <code class=\"docutils literal notranslate\">REMOTE_USER</code>. I Django görs värdet tillgängligt i <a class=\"reference internal\" href=\"/sv/6.1/ref/request-response/#django.http.HttpRequest.META\" title=\"django.http.HttpRequest.META\"><code class=\"xref py py-attr docutils literal notranslate\">request.META</code></a> (som <code class=\"docutils literal notranslate\">REMOTE_USER</code> när det anges som en miljövariabel, som i WSGI, eller <code class=\"docutils literal notranslate\">HTTP_REMOTE_USER</code> när det anges via en HTTP-rubrik, som i ASGI). Django kan konfigureras för att använda värdet <code class=\"docutils literal notranslate\">REMOTE_USER</code> med klasserna <code class=\"docutils literal notranslate\">RemoteUserMiddleware</code> eller <code class=\"docutils literal notranslate\">PersistentRemoteUserMiddleware</code> och <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend\" title=\"django.contrib.auth.backends.RemoteUserBackend\"><code class=\"xref py py-class docutils literal notranslate\">RemoteUserBackend</code></a> i <a class=\"reference internal\" href=\"/sv/6.1/topics/auth/#module-django.contrib.auth\" title=\"django.contrib.auth: Django's authentication framework.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.auth</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/6.1/ref/middleware/#django.contrib.auth.middleware.RemoteUserMiddleware\" title=\"django.contrib.auth.middleware.RemoteUserMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">django.contrib.auth.middleware.RemoteUserMiddleware</code></a> i inställningen <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\">MIDDLEWARE</code></a> <strong>efter</strong> <a class=\"reference internal\" href=\"/sv/6.1/ref/middleware/#django.contrib.auth.middleware.AuthenticationMiddleware\" title=\"django.contrib.auth.middleware.AuthenticationMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">django.contrib.auth.middleware.AuthenticationMiddleware</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>MIDDLEWARE <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/6.1/ref/contrib/auth/#django.contrib.auth.backends.ModelBackend\" title=\"django.contrib.auth.backends.ModelBackend\"><code class=\"xref py py-class docutils literal notranslate\">ModelBackend</code></a> med <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend\" title=\"django.contrib.auth.backends.RemoteUserBackend\"><code class=\"xref py py-class docutils literal notranslate\">RemoteUserBackend</code></a> i inställningen <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-AUTHENTICATION_BACKENDS\"><code class=\"xref std std-setting docutils literal notranslate\">AUTHENTICATION_BACKENDS</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>AUTHENTICATION_BACKENDS <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 den här konfigurationen upptäcker <code class=\"docutils literal notranslate\">RemoteUserMiddleware</code> användarnamnet i <code class=\"docutils literal notranslate\">request.META['REMOTE_USER']</code> (eller <code class=\"docutils literal notranslate\">request.META['HTTP_REMOTE_USER']</code> under ASGI) och autentiserar och loggar automatiskt in användaren med <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend\" title=\"django.contrib.auth.backends.RemoteUserBackend\"><code class=\"xref py py-class docutils literal notranslate\">RemoteUserBackend</code></a>.</p>\n<p>Var medveten om att just denna inställning inaktiverar autentisering med standard <code class=\"docutils literal notranslate\">ModelBackend</code>. Detta innebär att om värdet <code class=\"docutils literal notranslate\">REMOTE_USER</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\">'django.contrib.auth.backends.ModelBackend'</code> i listan <code class=\"docutils literal notranslate\">AUTHENTICATION_BACKENDS</code> kommer <code class=\"docutils literal notranslate\">ModelBackend</code> att användas som reserv om <code class=\"docutils literal notranslate\">REMOTE_USER</code> saknas, vilket kommer att lösa dessa problem.</p>\n<p>Djangos användarhantering, till exempel vyerna i <code class=\"docutils literal notranslate\">contrib.admin</code> och kommandot <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-createsuperuser\"><code class=\"xref std std-djadmin docutils literal notranslate\">createsuperuser</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\">AUTHENTICATION_BACKENDS</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\">RemoteUserBackend</code> ärver från <code class=\"docutils literal notranslate\">ModelBackend</code> kommer du fortfarande att ha samma behörighetskontroll som implementeras i <code class=\"docutils literal notranslate\">ModelBackend</code>.</p>\n<p>Användare med <a class=\"reference internal\" href=\"/sv/6.1/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\">is_active=False</code></a> tillåts inte att autentisera sig. Använd <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/auth/#django.contrib.auth.backends.AllowAllUsersRemoteUserBackend\" title=\"django.contrib.auth.backends.AllowAllUsersRemoteUserBackend\"><code class=\"xref py py-class docutils literal notranslate\">AllowAllUsersRemoteUserBackend</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\">REMOTE_USER</code>, kan du skapa en underklass till <code class=\"docutils literal notranslate\">RemoteUserMiddleware</code> och ställa in attributet <code class=\"docutils literal notranslate\">header</code> till önskad <code class=\"docutils literal notranslate\">request.META</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\">mysite/middleware.py</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=\"nn\">django.contrib.auth.middleware</span> <span class=\"kn\">import</span> RemoteUserMiddleware\n\n\n <span class=\"k\">class</span> <span class=\"nc\">CustomHeaderRemoteUserMiddleware</span><span class=\"p\">(</span>RemoteUserMiddleware<span class=\"p\">):</span>\n     header <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/6.1/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\">MIDDLEWARE</code></a> istället för <a class=\"reference internal\" href=\"/sv/6.1/ref/middleware/#django.contrib.auth.middleware.RemoteUserMiddleware\" title=\"django.contrib.auth.middleware.RemoteUserMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">django.contrib.auth.middleware.RemoteUserMiddleware</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>MIDDLEWARE <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><code class=\"docutils literal notranslate\">RemoteUserMiddleware</code> får inte driftsättas i konfigurationer där en klient kan ange rubriken. Du måste säkerställa att webbservern eller den omvända proxyn alltid sätter eller tar bort rubriken utifrån lämpliga autentiseringskontroller och aldrig låter en slutanvändare skicka in ett falskt (eller ”spoofat”) rubrikvärde.</p>\n<p>Eftersom HTTP-rubrikerna <code class=\"docutils literal notranslate\">X-Auth-User</code> och <code class=\"docutils literal notranslate\">X-Auth_User</code> (till exempel) båda normaliseras till nyckeln <code class=\"docutils literal notranslate\">HTTP_X_AUTH_USER</code> i <code class=\"docutils literal notranslate\">request.META</code>, måste du också kontrollera att webbservern inte tillåter en förfalskad rubrik där understreck används i stället för bindestreck.</p>\n<p>Under WSGI gäller inte den här varningen för <code class=\"docutils literal notranslate\">RemoteUserMiddleware</code> i dess standardkonfiguration med <code class=\"docutils literal notranslate\">header = &quot;REMOTE_USER&quot;</code>, eftersom en nyckel i <code class=\"docutils literal notranslate\">request.META</code> som inte börjar med <code class=\"docutils literal notranslate\">HTTP_</code> bara kan sättas av WSGI-servern och inte direkt av en HTTP-rubrik i en begäran.</p>\n<p>Varningen gäller under ASGI i alla konfigurationer, eftersom det inte finns någon motsvarighet till en WSGI-servers möjlighet att placera ett betrott värde i miljön. ASGI-driftsättningar <em>måste</em> använda en omvänd proxy enligt beskrivningen ovan när denna middleware används.</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/6.1/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend\" title=\"django.contrib.auth.backends.RemoteUserBackend\"><code class=\"xref py py-class docutils literal notranslate\">RemoteUserBackend</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\">REMOTE_USER</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\">RemoteUserMiddleware</code> förutsätter att HTTP-förfrågningshuvudet <code class=\"docutils literal notranslate\">REMOTE_USER</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\">htpasswd</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/6.1/ref/middleware/#django.contrib.auth.middleware.PersistentRemoteUserMiddleware\" title=\"django.contrib.auth.middleware.PersistentRemoteUserMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">PersistentRemoteUserMiddleware</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/6.1/ref/middleware/#django.contrib.auth.middleware.RemoteUserMiddleware\" title=\"django.contrib.auth.middleware.RemoteUserMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">RemoteUserMiddleware</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/6.1/howto/"}],"prev":{"docname":"howto/static-files/deployment","title":"Så här distribuerar du statiska filer","url":"/sv/6.1/howto/static-files/deployment/"},"next":{"docname":"howto/csp","title":"Hur man använder Djangos Content Security Policy","url":"/sv/6.1/howto/csp/"},"formats":{"html":"/sv/6.1/howto/auth-remote-user/","markdown":"/sv/6.1/howto/auth-remote-user.md","json":"/sv/6.1/howto/auth-remote-user.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/howto/auth-remote-user.txt","official":"https://docs.djangoproject.com/sv/6.1/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"]}