{"title":"Otentikasi menggunakan REMOTE_USER","version":"2.2","locale":"id","docname":"howto/auth-remote-user","url":"/id/2.2/howto/auth-remote-user/","canonical":"https://djangodocs.dev/id/2.2/howto/auth-remote-user/","summary":"Dokumen ini menjelaskan bagaimana memanfaatkan sumber otentikasi eksternal (di mana server Web menetapkan variabel environment REMOTE_USER ) dalam aplikasi Django…","html":"<h1>Otentikasi menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code><a class=\"heading-anchor\" href=\"#authentication-using-remote-user\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Dokumen ini menjelaskan bagaimana memanfaatkan sumber otentikasi eksternal (di mana server Web menetapkan variabel environment <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code>) dalam aplikasi Django Anda. Jenis solusi otentikasi biasanya terlihat di situs intranet, dengan solusi single sign-on seperti IIS dan Integrated Windows Authentication atau Apache dan <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>,` WebAuth`_, <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>mod_auth_sspi <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>_, dll</p>\n<p>Ketika peladen Jaringan mengurus pembuktian keaslian dia khususnya menyetel variabel lingkungan <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code> untuk digunakan dalam aplikasi pokok. Dalam Django, <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code> adalah dibuat tersedia dalam atribut <a class=\"reference internal\" href=\"/id/2.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 dapat dikonfigurasikan untuk  memanfaatkan nilai  <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code> menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code> atau``PersistentRemoteUserMiddleware``, dan kelas <a class=\"reference internal\" href=\"/id/2.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> ditemukan dalam <a class=\"reference internal\" href=\"/id/2.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>Pengaturan<a class=\"heading-anchor\" href=\"#configuration\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Pertama, andaharus menambahkan <a class=\"reference internal\" href=\"/id/2.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> pada pengaturan <a class=\"reference internal\" href=\"/id/2.2/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> <strong>setelah</strong> <a class=\"reference internal\" href=\"/id/2.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=\"s1\">&#39;...&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;django.contrib.auth.middleware.AuthenticationMiddleware&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;django.contrib.auth.middleware.RemoteUserMiddleware&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;...&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Selanjutnya, anda harus mengganti <a class=\"reference internal\" href=\"/id/2.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> dengan <a class=\"reference internal\" href=\"/id/2.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> di pengaturan <a class=\"reference internal\" href=\"/id/2.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=\"s1\">&#39;django.contrib.auth.backends.RemoteUserBackend&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Dengan pengaturan ini, <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code> akan mengenali nama pengguna di <code class=\"docutils literal notranslate\"><span class=\"pre\">request.META['REMOTE_USER']</span></code> dan akan mengecek keasliannya dan masuk-otomatis bagi pengguna menggunakan <a class=\"reference internal\" href=\"/id/2.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>Waspada bahwa setelan khusus ini meniadakan pembuktian keaslian dengan awal <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelBackend</span></code>. Ini berarti bahwa jika nilai <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code> tidak disetel kemudian pengguna tidak dapat masuk, bahkan menggunakan antarmuka admin Django. Menambahkan <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.auth.backends.ModelBackend'</span></code> pada daftar <code class=\"docutils literal notranslate\"><span class=\"pre\">AUTHENTICATION_BACKENDS</span></code> akan menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelBackend</span></code> sebagai alternatif jika <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code> tidak hadir, yang akan menyelesaikan masalah ini.</p>\n<p>Pengelola pengguna Django, seperti tampilan dalam perintah pengelola <code class=\"docutils literal notranslate\"><span class=\"pre\">contrib.admin</span></code> dan the <a class=\"reference internal\" href=\"/id/2.2/ref/django-admin/#django-admin-createsuperuser\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">createsuperuser</span></code></a>, tidak dipadukan dengan pengguna kendali jauh. Antarmuka ini bekerja dengan pengguna disimpan dalam basisdata tanpa memperhatikan <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\">Catatan</p>\n<p>Sejak <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserBackend</span></code> warisan dari <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelBackend</span></code>, anda akan masih mempunyai semua pemeriksaan perizinan sama yang diterapkan dalam <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelBackend</span></code>.</p>\n<p>Pengguna dengan <a class=\"reference internal\" href=\"/id/2.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> tidak akan diizinkan mengotentifikasi. Gunakan <a class=\"reference internal\" href=\"/id/2.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> jika anda ingin mengizinkan mereka.</p>\n</aside>\n<p>Jika mekanisme pembuktian keaslian anda menggunakan kepala HTTP penyesuaian dan bukan <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code>, anda dapat men subkelas kan <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code> dan menyetel atribut <code class=\"docutils literal notranslate\"><span class=\"pre\">header</span></code> ke kunci <code class=\"docutils literal notranslate\"><span class=\"pre\">request.META</span></code> yang diinginkan. Sebagai contoh:</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<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=\"s1\">&#39;HTTP_AUTHUSER&#39;</span>\n</code></pre></div>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Peringatan</p>\n<p>Sangat berhati-hatilah jika menggunakan subkelas <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code> dengan kepala HTTP penyesuaian. Anda harus pastikan bahwa peladen jaringan paling depan anda selalu disetel atau memotong kepala itu berdasarkan pada pemeriksaan pembuktian keaslian yang sesuai, jangan pernah mengizinkan pengguna-akhir mengajukan nilai kepala tiruan (atau &quot;palse&quot;). Sejak kepala HTTP <code class=\"docutils literal notranslate\"><span class=\"pre\">X-Auth-User</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">X-Auth_User</span></code> (sebagai contoh) keduanya menormalkan ke kunci <code class=\"docutils literal notranslate\"><span class=\"pre\">HTTP_X_AUTH_USER</span></code> dalam <code class=\"docutils literal notranslate\"><span class=\"pre\">request.META</span></code>, anda harus juga memeriksa bahwa peladen jaringan anda tidak mengizinkan kepala palsu menggunakan garis bawah di tempat atau strip.</p>\n<p>Peringatan ini tidak berlaku pada <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code> dalam konfigurasi awalnya dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">header</span> <span class=\"pre\">=</span> <span class=\"pre\">'REMOTE_USER'</span></code>, sejak sebuah kunci tidak dimulai dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">HTTP_</span></code> dalam <code class=\"docutils literal notranslate\"><span class=\"pre\">request.META</span></code> dapat hanya disetel dengan peladen WSGI anda, bukan secara langsung dari kepala meminta HTTP.</p>\n</aside>\n<p>Jika anda butuh lebih kendali, anda dapat membuat backend pembuktian keaslian sendiri yang mewarisi dari <a class=\"reference internal\" href=\"/id/2.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> dan menimpa satu atau lebih atribut dan metodenya.</p>\n</section>\n<section id=\"using-remote-user-on-login-pages-only\">\n<span id=\"persistent-remote-user-middleware-howto\"></span><h2>Menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code> hanya pada halaman masuk<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>Pembuktian keaslian middleware <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code> menganggap bahwa kepala permintaan HTTP <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code> mewakili dengan semua permintaan dibuktikan keaslian. Itu mungkin diharapkan dan secara praktiknya ketika Pembuktian Keaslian HTTP Dasar dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">htpasswd</span></code> atau mekanisme sederhana lainnya digunakan, tetapi dengan Negotiate (GSSAPI/Kerberos) atau cara pembuktian keaslian intensif sumber daya lainnya, pembuktian keaslian dalam peladen HTTP depan biasanya hanya disetel untuk satu atau sedikit URL masuk, dan setelah berhasil dibuktikan keasliannya, aplikasi seharusnya menjaga sesi dibuktikan keasliannya sendiri.</p>\n<p><a class=\"reference internal\" href=\"/id/2.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> menyediakan dukungan untuk penggunaan kasus ini. Dia akan menjaga sesi dibuktikan keasliannya sampai keluar oleh pengguna. Kelas dapat digunakan sebagai pengganti dari <a class=\"reference internal\" href=\"/id/2.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> dalam dokumentasi diatas.</p>\n</section>","rootId":"authentication-using-remote-user","toc":[{"title":"Pengaturan","anchor":"configuration","children":[]},{"title":"Menggunakan REMOTE_USER hanya pada halaman masuk","anchor":"using-remote-user-on-login-pages-only","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"Panduan \"Bagaimana\"","url":"/id/2.2/howto/"}],"prev":{"docname":"howto/index","title":"Panduan \"Bagaimana\"","url":"/id/2.2/howto/"},"next":{"docname":"howto/custom-management-commands","title":"Menulis perintah django-admin penyesuaian","url":"/id/2.2/howto/custom-management-commands/"},"formats":{"html":"/id/2.2/howto/auth-remote-user/","markdown":"/id/2.2/howto/auth-remote-user.md","json":"/id/2.2/howto/auth-remote-user.json"},"source":"https://github.com/django/django/blob/stable/2.2.x/docs/howto/auth-remote-user.txt","official":"https://docs.djangoproject.com/id/2.2/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","1.9"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}