{"title":"Conas fíordheimhniú ag baint úsáide as REMOTE_USER","version":"6.1","locale":"ga","docname":"howto/auth-remote-user","url":"/ga/6.1/howto/auth-remote-user/","canonical":"https://djangodocs.dev/ga/6.1/howto/auth-remote-user/","summary":"This document describes how to make use of external authentication sources in your Django applications.","html":"<h1>Conas fíordheimhniú ag baint úsáide as <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=\"/ga/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> (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=\"/ga/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> classes found in\n<a class=\"reference internal\" href=\"/ga/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>Cumraíocht<a class=\"heading-anchor\" href=\"#configuration\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ar dtús, ní mór duit an:class: django.contrib.auth.middleware.remoteUserMiddleware a chur leis an socrú:setting: MIDDLEWARE <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">**</span></a>tar éis ** an:class: django.contrib.auth.middleware.AuthenticationMiddleware:</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>Ansin, ní mór duit:class: ~django.contrib.auth.backends.modelBackend a chur in ionad la:class: ~django.contrib.auth.backends.remoteUserBackend sa socrú: AUTHENTICATION_BACKENDS:</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=\"/ga/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>Bí ar an eolas go ndíchumasaíonn an socrú áirithe seo fíordheimhniú leis an réamhshocraithe <code class=\"docutils literal notranslate\">ModelBackend</code>. Ciallaíonn sé seo mura socraítear an luach REMOTE_USER` ansin níl an t-úsáideoir in ann logáil isteach, fiú ag baint úsáide as comhéadan riaracháin Django. Ag cur <code class=\"docutils literal notranslate\">`Django.contrib.auth.backends.ModelBackend'</code> leis an liosta <code class=\"docutils literal notranslate\">AUTHENTICATION_BACKENDS</code>, úsáidfear <code class=\"docutils literal notranslate\">ModelBackend</code> mar fhillback má tá <code class=\"docutils literal notranslate\">REMOTE_USER</code> as láthair, rud a réiteoidh na saincheisteanna seo.</p>\n<p>Ní chomhtháthaíonn bainistíocht úsáideora Django, mar shampla na tuairimí i contrib.admin ``agus an t-ordú bainistíochta: djadmin: `createsuperuser, le húsáideoirí iargúlta. Oibríonn na comhéadain seo le húsáideoirí atá stóráilte sa bhunachar sonraí beag beann ar <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>AUTHENTICATION_BACKENDS`.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Ós rud é go dtagann an RemoteUserBackend` oidhreacht ó <code class=\"docutils literal notranslate\">ModelBackend</code>, beidh na ceadanna céanna go léir agat fós a chuirtear i bhfeidhm i <code class=\"docutils literal notranslate\">ModelBackend</code>.</p>\n<p>&lt;django.contrib.auth.models.User.is_active&gt;Ní cheadfar d'úsáideoirí le:attr: is_active=false `fíordheimhniú. Úsáid:class: `~django.contrib.auth.backends.allowAllUsersRemoteUserBackend más mian leat ligean dóibh.</p>\n</aside>\n<p>If your authentication mechanism uses a custom HTTP header and not\n<code class=\"docutils literal notranslate\">REMOTE_USER</code>, you can subclass <code class=\"docutils literal notranslate\">RemoteUserMiddleware</code> and set the\n<code class=\"docutils literal notranslate\">header</code> attribute to the desired <code class=\"docutils literal notranslate\">request.META</code> key. For example:</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>This custom middleware is then used in the <a class=\"reference internal\" href=\"/ga/6.1/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\">MIDDLEWARE</code></a> setting\ninstead of <a class=\"reference internal\" href=\"/ga/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\">Warning</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&quot;spoofed&quot;) 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>Má theastaíonn níos mó smachta uait, is féidir leat do chúltaca fíordheimhnithe féin a chruthú a fhaigheann oidhreacht ó:class: ~django.contrib.auth.backends.remoteUserBackend agus ceann amháin nó níos mó dá thréithe agus modhanna a shárú.</p>\n</section>\n<section id=\"using-remote-user-on-login-pages-only\">\n<span id=\"persistent-remote-user-middleware-howto\"></span><h2>Ag baint úsáide as <code class=\"docutils literal notranslate\">REMOTE_USER</code> ar leathanaigh logála isteach amháin<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>Glacann an middleware fíordheimhnithe <code class=\"docutils literal notranslate\">RemoteUserMiddleware</code> go bhfuil an ceannteideal iarratais HTTP <code class=\"docutils literal notranslate\">REMOTE_USER</code> i láthair le gach iarratas fíordheimhnithe. D'fhéadfaí súil leis sin agus praiticiúil nuair a úsáidtear Basic HTTP Auth le htpasswd nó meicníochtaí den chineál céanna, ach le Negoate (GSSAPI/KerberOS) nó modhanna fíordheimhnithe dian-acmhainní eile, de ghnáth ní bhunaítear an fíordheimhniú sa bhfreastalaí HTTP tosaigh ach le haghaidh URL amháin nó cúpla URL, agus tar éis fíordheimhniú rathúil, ceaptar an feidhmchlár an seisiún fíordheimhnithe féin a choinneáil.</p>\n<p><a class=\"reference internal\" href=\"/ga/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>\nprovides support for this use case. It will maintain the authenticated session\nuntil explicit logout by the user. The class can be used as a drop-in\nreplacement of <a class=\"reference internal\" href=\"/ga/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>\nin the documentation above.</p>\n</section>","rootId":"how-to-authenticate-using-remote-user","toc":[{"title":"Cumraíocht","anchor":"configuration","children":[]},{"title":"Ag baint úsáide as REMOTE_USER ar leathanaigh logála isteach amháin","anchor":"using-remote-user-on-login-pages-only","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"Treoracha conas","url":"/ga/6.1/howto/"}],"prev":{"docname":"howto/static-files/deployment","title":"Conas comhaid statacha a imscaradh","url":"/ga/6.1/howto/static-files/deployment/"},"next":{"docname":"howto/csp","title":"How to use Django's Content Security Policy","url":"/ga/6.1/howto/csp/"},"formats":{"html":"/ga/6.1/howto/auth-remote-user/","markdown":"/ga/6.1/howto/auth-remote-user.md","json":"/ga/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/ga/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"]}