{"title":"Uwierzytelnienie przy użyciu REMOTE_USER","version":"5.0","locale":"pl","docname":"howto/auth-remote-user","url":"/pl/5.0/howto/auth-remote-user/","canonical":"https://djangodocs.dev/pl/5.0/howto/auth-remote-user/","summary":"Ten dokument opisuje jak zrobić użytek z zewnętrznych źródeł uwierzytelniania (gdzie Web serwer ustawia zmienną środowiskową REMOTE_USER ) w twoich aplikacjach…","html":"<h1>Uwierzytelnienie przy użyciu <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>Ten dokument opisuje jak zrobić użytek z zewnętrznych źródeł uwierzytelniania (gdzie Web serwer ustawia zmienną środowiskową <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code>) w twoich aplikacjach Django. Ten typ sposobu na uwierzytelnianie można zazwyczaj spotkać na stronach intranetowych z rozwiązaniami pojedynczego logowania takimi jak IIS i Integrated Windows Authentication lub Apache i <a class=\"reference external\" href=\"https://httpd.apache.org/docs/2.2/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=\"http://weblogin.org\">Cosign</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> itp.</p>\n<p>Kiedy serwer WWW zajmuje się uwierzytelnianiem, zazwyczaj ustawia zmienną środowiskową <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code> do użycia w aplikacji bazowej. W Django, <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code> jest udostępniony w atrybucie <code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">request.META</span> <span class=\"pre\">`.</span> <span class=\"pre\">Django</span> <span class=\"pre\">może</span> <span class=\"pre\">być</span> <span class=\"pre\">skonfigurowane</span> <span class=\"pre\">do</span> <span class=\"pre\">wykorzystania</span> <span class=\"pre\">wartości</span> <span class=\"pre\">``REMOTE_USER`</span></code> za pomocą <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code> lub <code class=\"docutils literal notranslate\"><span class=\"pre\">PersistentRemoteUserMiddleware</span></code>, oraz <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RemoteUserBackend`</span></code> klas znajdujących się w <a class=\"reference internal\" href=\"/pl/5.0/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>Konfiguracja<a class=\"heading-anchor\" href=\"#configuration\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Najpierw musisz dodać <a class=\"reference internal\" href=\"/pl/5.0/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> do ustawienia <a class=\"reference internal\" href=\"/pl/5.0/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> <strong>po</strong> <a class=\"reference internal\" href=\"/pl/5.0/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>Następnie musisz zamienić <a class=\"reference internal\" href=\"/pl/5.0/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> na <a class=\"reference internal\" href=\"/pl/5.0/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> w ustawieniu <a class=\"reference internal\" href=\"/pl/5.0/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>W takiej konfiguracji <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code> wykryje nazwę użytkownika w <code class=\"docutils literal notranslate\"><span class=\"pre\">request.META['REMOTE_USER']</span></code> i będzie autentykował ją i automatycznie logował tego użytkownika przy pomocy <a class=\"reference internal\" href=\"/pl/5.0/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>Miej świadomość, że ta konkretna konfiguracja wyłącza autentykację z domyślnym <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelBackend</span></code>. To oznacza, że jeśli wartość <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code> nie jest ustawiona, wtedy użytkownik nie jest w stanie się zalogować, nawet używając interfejsu panelu administracyjnego Django. Dodanie <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.auth.backends.ModelBackend'</span></code> do listy <code class=\"docutils literal notranslate\"><span class=\"pre\">AUTHENTICATION_BACKENDS</span></code> będzie używać <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelBackend</span></code> jako fallbacku, jeśli nie ma <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code>, co rozwiąże te problemy.</p>\n<p>Zarządzanie użytkownikami Django, tak jak widok w  <code class=\"docutils literal notranslate\"><span class=\"pre\">contrib.admin</span></code> i polecenie <a class=\"reference internal\" href=\"/pl/5.0/ref/django-admin/#django-admin-createsuperuser\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">createsuperuser</span></code></a>  nie jest zintegrowane ze zdalnymi użytkownikami. Te interfejsy pracują z użytkownikami przechowywanymi w bazie bez względu na <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\">Informacja</p>\n<p>Dopóki <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserBackend</span></code> dziedziczy z  <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelBackend</span> <span class=\"pre\">``,</span> <span class=\"pre\">będziesz</span> <span class=\"pre\">miał</span> <span class=\"pre\">te</span> <span class=\"pre\">same</span> <span class=\"pre\">uprawnienia</span> <span class=\"pre\">zaimplementowane</span> <span class=\"pre\">w</span> <span class=\"pre\">``ModelBackend</span></code>.</p>\n<p>Użytkownicy z <a class=\"reference internal\" href=\"/pl/5.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\"><span class=\"pre\">is_active=False</span></code></a>  nie będą mieli przyzwolenia na uwierzetelnienie. Użyj <a class=\"reference internal\" href=\"/pl/5.0/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> jeśli chcesz na to pozwolić.</p>\n</aside>\n<p>Jeśli twój mechanizm uwierzetelniania używa niestandardowego nagłówka HTTP ani <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code>, możesz stworzyć podklasę <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code> i ustawić atrybut <code class=\"docutils literal notranslate\"><span class=\"pre\">header</span></code> na pożądany klucz <code class=\"docutils literal notranslate\"><span class=\"pre\">request.META</span></code>. Na przykład:</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=\"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\">CustomHeaderMiddleware</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></div>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Ostrzeżenie</p>\n<p>Bądź bardzo ostrożny kiedy używać podklasy <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code> z niestandardowym nagłówkiem HTTP. Musisz być pewny, że twój serwer front-endowy zawsze ustawi lub usunie ten nagłówek w oparciu o odpowiednie sprawdzenia autentykacji, nigdy nie pozwalając użytkownikowi końcowemu na przesłanie fałszywej (lub „sfałszowanej”) wartości nagłówka.</p>\n<p>To ostrzeżenie nie dotyczy <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code> z domyślną konfiguracją <code class=\"docutils literal notranslate\"><span class=\"pre\">header</span> <span class=\"pre\">=</span> <span class=\"pre\">'REMOTE_USER'</span></code>, ponieważ klucz nie zaczynający się od <code class=\"docutils literal notranslate\"><span class=\"pre\">HTTP_</span></code> w <code class=\"docutils literal notranslate\"><span class=\"pre\">request.META</span></code> może być ustawiony tylko przez twój serwer WSGI, nie bezpośrednio z nagłówka żądania HTTP.</p>\n</aside>\n<p>Jeśli potrzebujesz więcej kontroli, możesz stworzyć swój własny backendowy system uwierzetelniania dziedziczący z <a class=\"reference internal\" href=\"/pl/5.0/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 przeładowujący jeden lub więcej jego atrybutów i metod.</p>\n</section>\n<section id=\"using-remote-user-on-login-pages-only\">\n<span id=\"persistent-remote-user-middleware-howto\"></span><h2>Używaj <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code> tylko na stronach logowania<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>Middleware uwierzytelniający <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code> zakłada, że nagłówek <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code> żądania HTTP jest obecny we wszystkich uwierzytelnionych żądaniach. To może być oczekiwane i praktyczne, kiedy użyty jest mechanizm Basic HTTP Auth z <code class=\"docutils literal notranslate\"><span class=\"pre\">htpasswd</span></code> lub jemu podobne, ale z metodą uwierzytelnienia Negotiate (GSSAPI/Kerberos) lub innymi metodami niewrażliwymi na zasoby, uwierzytelnianie we front-endowym serwerze HTTP jest zazwyczaj tylko przygotowaniem dla jednego lub kilku URLi logowania i po udanym uwierzytelnieniu aplikacja ma za zadanie samodzielnie utrzymać uwierzytelnioną sesję.</p>\n<p><a class=\"reference internal\" href=\"/pl/5.0/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> dostarcza wsparcia dla tego przypadku użycia. Będzie utrzymywać uwierzetelnioną sesję dopóki użytkownik wprost się nie wyloguje. Klasa może być użytka jako zamiennik <a class=\"reference internal\" href=\"/pl/5.0/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> w powyższej dokumentacji.</p>\n</section>","rootId":"how-to-authenticate-using-remote-user","toc":[{"title":"Konfiguracja","anchor":"configuration","children":[]},{"title":"Używaj REMOTE_USER tylko na stronach logowania","anchor":"using-remote-user-on-login-pages-only","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"Przewodniki „Jak to zrobić”","url":"/pl/5.0/howto/"}],"prev":{"docname":"howto/index","title":"Przewodniki „Jak to zrobić”","url":"/pl/5.0/howto/"},"next":{"docname":"howto/csrf","title":"Jak używać ochrony CSRF w Django","url":"/pl/5.0/howto/csrf/"},"formats":{"html":"/pl/5.0/howto/auth-remote-user/","markdown":"/pl/5.0/howto/auth-remote-user.md","json":"/pl/5.0/howto/auth-remote-user.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/howto/auth-remote-user.txt","official":"https://docs.djangoproject.com/pl/5.0/howto/auth-remote-user/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}