{"title":"Bagaimana mengotentikasi menggunakan REMOTE_USER","version":"5.0","locale":"id","docname":"howto/auth-remote-user","url":"/id/5.0/howto/auth-remote-user/","canonical":"https://djangodocs.dev/id/5.0/howto/auth-remote-user/","summary":"Dokumen in imenggambarkan bagaimana membuat sumber autentifikasi luar (dimana peladen jaringan menyetel variabel lingkungan REMOTE_USER ) dalam aplikasi Django…","html":"<h1>Bagaimana mengotentikasi menggunakan <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>Dokumen in imenggambarkan bagaimana membuat sumber autentifikasi luar (dimana peladen jaringan menyetel variabel lingkungan <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USER</span></code>) dalam aplikasi Django anda.  Jenis solusi autentifikasi ini khususnya dilihat pada situs intranet dengan solusi sistem masuk tunggal 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>, <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>, dll.</p>\n<p>Ketika peladen jaringan mengurus autentifikasi 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> dibuat tersedia dalam atribut the <a class=\"reference internal\" href=\"/id/5.0/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 dikonfigurasi 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 <code class=\"docutils literal notranslate\"><span class=\"pre\">PersistentRemoteUserMiddleware</span></code>, dan kelas-kelas <a class=\"reference internal\" href=\"/id/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> ditemukan dalam <a class=\"reference internal\" href=\"/id/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>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/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> pada pengaturan <a class=\"reference internal\" href=\"/id/5.0/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/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>Selanjutnya, anda harus mengganti <a class=\"reference internal\" href=\"/id/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> dengan <a class=\"reference internal\" href=\"/id/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> di pengaturan <a class=\"reference internal\" href=\"/id/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>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/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>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/5.0/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/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> tidak akan diizinkan mengotentifikasi. Gunakan <a class=\"reference internal\" href=\"/id/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> 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\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\">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/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> 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>Middleware autentifikasi <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code> beranggapan bahwa kepala peminta HTTP <code class=\"docutils literal notranslate\"><span class=\"pre\">REMOTE_USE</span></code> hadir dengan semua permintaan terautentifikasi. Itu mungkin diharapkan dan praktis ketika Basic HTTP Auth dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">htpasswd</span></code> atau mekanisme yang mirip digunakan, tetapi dengan Negotiate (GSSAPI/Kerberos) atau metode otentikasi sumber daya intensif lainnya, autentifikasi dalam peladen HTTP font-end biasanya hanya menyetel untuk satu atau sedikit URL masuk, dan setelah autentifikasi berhasil, aplikasi diharapkan merawat sesu autentifikasi itu sendiri.</p>\n<p><a class=\"reference internal\" href=\"/id/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> 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/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> dalam dokumentasi diatas.</p>\n</section>","rootId":"how-to-authenticate-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/5.0/howto/"}],"prev":{"docname":"howto/index","title":"Panduan \"Bagaimana\"","url":"/id/5.0/howto/"},"next":{"docname":"howto/csrf","title":"Bagaimana menggunakan perlindungan CSRF Django","url":"/id/5.0/howto/csrf/"},"formats":{"html":"/id/5.0/howto/auth-remote-user/","markdown":"/id/5.0/howto/auth-remote-user.md","json":"/id/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/id/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","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}