{"title":"Hur man autentiserar med hjälp av REMOTE_USER","version":"6.0","locale":"sv","docname":"howto/auth-remote-user","url":"/sv/6.0/howto/auth-remote-user/","canonical":"https://djangodocs.dev/sv/6.0/howto/auth-remote-user/","summary":"This document describes how to make use of external authentication sources in your Django applications.","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>This document describes how to make use of external authentication sources in\nyour Django applications. This type of authentication solution is typically\nseen on intranet sites, with single sign-on solutions such as IIS and\nIntegrated Windows Authentication or Apache and <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>,\n<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>When the web server takes care of authentication it typically provides the\nauthenticated user as <code class=\"docutils literal notranslate\">REMOTE_USER</code>. In Django, this value is made available\nin <a class=\"reference internal\" href=\"/sv/6.0/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> (as <code class=\"docutils literal notranslate\">REMOTE_USER</code> when\nsupplied as an environment variable, as in WSGI, or <code class=\"docutils literal notranslate\">HTTP_REMOTE_USER</code> when\nsupplied via an HTTP header, as in ASGI). Django can be configured to make use\nof the <code class=\"docutils literal notranslate\">REMOTE_USER</code> value using the <code class=\"docutils literal notranslate\">RemoteUserMiddleware</code> or\n<code class=\"docutils literal notranslate\">PersistentRemoteUserMiddleware</code>, and\n<a class=\"reference internal\" href=\"/sv/6.0/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> classes found in\n<a class=\"reference internal\" href=\"/sv/6.0/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.0/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.0/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.0/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.0/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.0/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.0/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>With this setup, <code class=\"docutils literal notranslate\">RemoteUserMiddleware</code> will detect the username in\n<code class=\"docutils literal notranslate\">request.META['REMOTE_USER']</code> (or <code class=\"docutils literal notranslate\">request.META['HTTP_REMOTE_USER']</code> under\nASGI) and will authenticate and auto-login that user\nusing the <a class=\"reference internal\" href=\"/sv/6.0/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.0/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.0/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.0/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.0/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.0/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> must not be deployed in configurations where a\nclient can supply the header. You must be sure that your web server or\nreverse proxy always sets or strips that header based on the appropriate\nauthentication checks, never permitting an end user to submit a fake (or\n”spoofed”) header value.</p>\n<p>Since the HTTP headers <code class=\"docutils literal notranslate\">X-Auth-User</code> and <code class=\"docutils literal notranslate\">X-Auth_User</code> (for example)\nboth normalize to the <code class=\"docutils literal notranslate\">HTTP_X_AUTH_USER</code> key in <code class=\"docutils literal notranslate\">request.META</code>, you\nmust also check that your web server doesn’t allow a spoofed header using\nunderscores in place of dashes.</p>\n<p>Under WSGI, this warning doesn’t apply to <code class=\"docutils literal notranslate\">RemoteUserMiddleware</code> in its\ndefault configuration with <code class=\"docutils literal notranslate\">header = &quot;REMOTE_USER&quot;</code>, since a key that\ndoesn’t start with <code class=\"docutils literal notranslate\">HTTP_</code> in <code class=\"docutils literal notranslate\">request.META</code> can only be set by your\nWSGI server, not directly from an HTTP request header.</p>\n<p>This warning applies under ASGI in all configurations, because there is\nno equivalent for a WSGI server’s ability to place a trusted value in the\nenviron. ASGI deployments <em>must</em> use a reverse proxy as described above\nwhen using this middleware.</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.0/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.0/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.0/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.0/howto/"}],"prev":{"docname":"howto/static-files/deployment","title":"Så här distribuerar du statiska filer","url":"/sv/6.0/howto/static-files/deployment/"},"next":{"docname":"howto/csp","title":"Hur man använder Djangos Content Security Policy","url":"/sv/6.0/howto/csp/"},"formats":{"html":"/sv/6.0/howto/auth-remote-user/","markdown":"/sv/6.0/howto/auth-remote-user.md","json":"/sv/6.0/howto/auth-remote-user.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/howto/auth-remote-user.txt","official":"https://docs.djangoproject.com/sv/6.0/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"]}