---
title: "Bagaimana mengotentikasi menggunakan REMOTE_USER"
version: 5.2
locale: id
source: https://docs.djangoproject.com/id/5.2/howto/auth-remote-user/
canonical: https://djangodocs.dev/id/5.2/howto/auth-remote-user/
---
# Bagaimana mengotentikasi menggunakan `REMOTE_USER`

Dokumen menjelaskan cara memanfaatkan sumber autentifikasi luar (dimana peladen jaringan menyetel valriabel lingkungan `REMOTE_USER`) di apllikasi Django anda. Pemecahan jenis autentifikasi ini khususnya terlihat pada situs intranet, dengan pemecahan single sign-on seperti IIS dan Integrated Windows Authentication atau Apache dan [mod\_authnz\_ldap](https://httpd.apache.org/docs/current/mod/mod_authnz_ldap.html), [CAS](https://www.apereo.org/projects/cas), [WebAuth](https://uit.stanford.edu/service/authentication), [mod\_auth\_sspi](https://sourceforge.net/projects/mod-auth-sspi), dll.

Ketika peladen jaringan mengurus autentifikasi dia khususnya menyetel variabel lingkungan `REMOTE_USER` untuk digunakan dalam aplikasi pokok.  Dalam Django, `REMOTE_USER` dibuat tersedia dalam atribut the [`request.META`](/id/5.2/ref/request-response/#django.http.HttpRequest.META) .  Django dapat dikonfigurasi untuk memanfaatkan nilai `REMOTE_USER` menggunakan `RemoteUserMiddleware` atau `PersistentRemoteUserMiddleware`, dan kelas-kelas [`RemoteUserBackend`](/id/5.2/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend) ditemukan dalam [`django.contrib.auth`](/id/5.2/topics/auth/#module-django.contrib.auth).

## Pengaturan

Pertama, andaharus menambahkan [`django.contrib.auth.middleware.RemoteUserMiddleware`](/id/5.2/ref/middleware/#django.contrib.auth.middleware.RemoteUserMiddleware) pada pengaturan [`MIDDLEWARE`](/id/5.2/ref/settings/#std-setting-MIDDLEWARE) **setelah** [`django.contrib.auth.middleware.AuthenticationMiddleware`](/id/5.2/ref/middleware/#django.contrib.auth.middleware.AuthenticationMiddleware):

```
MIDDLEWARE = [
    "...",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.auth.middleware.RemoteUserMiddleware",
    "...",
]
```

Selanjutnya, anda harus mengganti [`ModelBackend`](/id/5.2/ref/contrib/auth/#django.contrib.auth.backends.ModelBackend) dengan [`RemoteUserBackend`](/id/5.2/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend) di pengaturan [`AUTHENTICATION_BACKENDS`](/id/5.2/ref/settings/#std-setting-AUTHENTICATION_BACKENDS)

```
AUTHENTICATION_BACKENDS = [
    "django.contrib.auth.backends.RemoteUserBackend",
]
```

Dengan pengaturan ini, `RemoteUserMiddleware` akan mengenali nama pengguna di `request.META['REMOTE_USER']` dan akan mengecek keasliannya dan masuk-otomatis bagi pengguna menggunakan [`RemoteUserBackend`](/id/5.2/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend).

Waspada bahwa setelan khusus ini meniadakan pembuktian keaslian dengan awal `ModelBackend`. Ini berarti bahwa jika nilai `REMOTE_USER` tidak disetel kemudian pengguna tidak dapat masuk, bahkan menggunakan antarmuka admin Django. Menambahkan `'django.contrib.auth.backends.ModelBackend'` pada daftar `AUTHENTICATION_BACKENDS` akan menggunakan `ModelBackend` sebagai alternatif jika `REMOTE_USER` tidak hadir, yang akan menyelesaikan masalah ini.

Pengelola pengguna Django, seperti tampilan dalam perintah pengelola `contrib.admin` dan the [`createsuperuser`](/id/5.2/ref/django-admin/#django-admin-createsuperuser), tidak dipadukan dengan pengguna kendali jauh. Antarmuka ini bekerja dengan pengguna disimpan dalam basisdata tanpa memperhatikan `AUTHENTICATION_BACKENDS`.

> **Note**
>
> Sejak `RemoteUserBackend` warisan dari `ModelBackend`, anda akan masih mempunyai semua pemeriksaan perizinan sama yang diterapkan dalam `ModelBackend`.
>
> Pengguna dengan [`is_active=False`](/id/5.2/ref/contrib/auth/#django.contrib.auth.models.User.is_active) tidak akan diizinkan mengotentifikasi. Gunakan [`AllowAllUsersRemoteUserBackend`](/id/5.2/ref/contrib/auth/#django.contrib.auth.backends.AllowAllUsersRemoteUserBackend) jika anda ingin mengizinkan mereka.

Jika mekanisme autentifikasi anda menggunakan penyeusaian kepala HTTP dan bukan `REMOTE_USER`, anda dapat mensub kelas `RemoteUserMiddleware` dan setel atribut `header` ke kunci `request.META` yang diinginkan. Sebagai contoh:

*`mysite/middleware.py`*

```python
 from django.contrib.auth.middleware import RemoteUserMiddleware

 class CustomHeaderRemoteUserMiddleware(RemoteUserMiddleware):
     header = "HTTP_AUTHUSER"
```

Middleware penyesuaian digunakan dalam pengaturan [`MIDDLEWARE`](/id/5.2/ref/settings/#std-setting-MIDDLEWARE) daripada [`django.contrib.auth.middleware.RemoteUserMiddleware`](/id/5.2/ref/middleware/#django.contrib.auth.middleware.RemoteUserMiddleware):

```
MIDDLEWARE = [
    "...",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "mysite.middleware.CustomHeaderRemoteUserMiddleware",
    "...",
]
```

> **Warning**
>
> Sangat berhati-hatilah jika menggunakan subkelas `RemoteUserMiddleware` 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 "palse"). Sejak kepala HTTP `X-Auth-User` dan `X-Auth_User` (sebagai contoh) keduanya menormalkan ke kunci `HTTP_X_AUTH_USER` dalam `request.META`, anda harus juga memeriksa bahwa peladen jaringan anda tidak mengizinkan kepala palsu menggunakan garis bawah di tempat atau strip.
>
> Peringatan ini tidak berlaku pada `RemoteUserMiddleware` dalam konfigurasi awalnya dengan `header = 'REMOTE_USER'`, sejak sebuah kunci tidak dimulai dengan `HTTP_` dalam `request.META` dapat hanya disetel dengan peladen WSGI anda, bukan secara langsung dari kepala meminta HTTP.

Jika anda butuh lebih kendali, anda dapat membuat backend pembuktian keaslian sendiri yang mewarisi dari [`RemoteUserBackend`](/id/5.2/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend) dan menimpa satu atau lebih atribut dan metodenya.

## Menggunakan `REMOTE_USER` hanya pada halaman masuk

Middleware autentifikasi `RemoteUserMiddleware` beranggapan bahwa kepala peminta HTTP `REMOTE_USE` hadir dengan semua permintaan terautentifikasi. Itu mungkin diharapkan dan praktis ketika Basic HTTP Auth dengan `htpasswd` 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.

[`PersistentRemoteUserMiddleware`](/id/5.2/ref/middleware/#django.contrib.auth.middleware.PersistentRemoteUserMiddleware) menyediakan dukungan untuk penggunaan kasus ini. Dia akan menjaga sesi dibuktikan keasliannya sampai keluar oleh pengguna. Kelas dapat digunakan sebagai pengganti dari [`RemoteUserMiddleware`](/id/5.2/ref/middleware/#django.contrib.auth.middleware.RemoteUserMiddleware) dalam dokumentasi diatas.
