# Dokumentasi Django 4.2.9.dev20231204082947

# Bagaimana mengotentikasi menggunakan `REMOTE_USER`

Dokumen in imenggambarkan bagaimana membuat sumber autentifikasi luar (dimana peladen jaringan menyetel variabel lingkungan `REMOTE_USER`) 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 mod_authnz_ldap, CAS, Cosign, WebAuth, 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` . Django dapat dikonfigurasi untuk memanfaatkan nilai `REMOTE_USER` menggunakan `RemoteUserMiddleware` atau `PersistentRemoteUserMiddleware`, dan kelas-kelas `RemoteUserBackend` ditemukan dalam `django.contrib.auth`.

## Pengaturan

Pertama, andaharus menambahkan `django.contrib.auth.middleware.RemoteUserMiddleware` pada pengaturan `MIDDLEWARE` setelah `django.contrib.auth.middleware.AuthenticationMiddleware`:

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

Selanjutnya, anda harus mengganti `ModelBackend` dengan `RemoteUserBackend` di pengaturan `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`.

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`, tidak dipadukan dengan pengguna kendali jauh. Antarmuka ini bekerja dengan pengguna disimpan dalam basisdata tanpa memperhatikan `AUTHENTICATION_BACKENDS`.

Catatan

Sejak `RemoteUserBackend` warisan dari `ModelBackend`, anda akan masih mempunyai semua pemeriksaan perizinan sama yang diterapkan dalam `ModelBackend`.

Pengguna dengan `is_active=False` tidak akan diizinkan mengotentifikasi. Gunakan `AllowAllUsersRemoteUserBackend` jika anda ingin mengizinkan mereka.

Jika mekanisme pembuktian keaslian anda menggunakan kepala HTTP penyesuaian dan bukan `REMOTE_USER`, anda dapat men subkelas kan `RemoteUserMiddleware` dan menyetel atribut `header` ke kunci `request.META` yang diinginkan. Sebagai contoh:

    from django.contrib.auth.middleware import RemoteUserMiddleware

    class CustomHeaderMiddleware(RemoteUserMiddleware):
        header = "HTTP_AUTHUSER"

Peringatan

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` 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` menyediakan dukungan untuk penggunaan kasus ini. Dia akan menjaga sesi dibuktikan keasliannya sampai keluar oleh pengguna. Kelas dapat digunakan sebagai pengganti dari `RemoteUserMiddleware` dalam dokumentasi diatas.