---
title: "How to authenticate using REMOTE_USER"
version: 4.1
locale: id
source: https://docs.djangoproject.com/id/4.1/howto/auth-remote-user/
canonical: https://djangodocs.dev/id/4.1/howto/auth-remote-user/
---
# How to authenticate using `REMOTE_USER`

This document describes how to make use of external authentication sources
(where the web server sets the `REMOTE_USER` environment variable) in your
Django applications.  This type of authentication solution is typically seen on
intranet sites, with single sign-on solutions such as IIS and Integrated
Windows Authentication or Apache and [mod\_authnz\_ldap](https://httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html), [CAS](https://www.apereo.org/projects/cas), [Cosign](http://weblogin.org),
[WebAuth](https://uit.stanford.edu/service/authentication), [mod\_auth\_sspi](https://sourceforge.net/projects/mod-auth-sspi), etc.

When the web server takes care of authentication it typically sets the
`REMOTE_USER` environment variable for use in the underlying application.  In
Django, `REMOTE_USER` is made available in the [`request.META`](/id/4.1/ref/request-response/#django.http.HttpRequest.META) attribute.  Django can be configured to make
use of the `REMOTE_USER` value using the `RemoteUserMiddleware`
or `PersistentRemoteUserMiddleware`, and
[`RemoteUserBackend`](/id/4.1/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend) classes found in
[`django.contrib.auth`](/id/4.1/topics/auth/#module-django.contrib.auth).

## Pengaturan

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

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

Selanjutnya, anda harus mengganti [`ModelBackend`](/id/4.1/ref/contrib/auth/#django.contrib.auth.backends.ModelBackend) dengan [`RemoteUserBackend`](/id/4.1/ref/contrib/auth/#django.contrib.auth.backends.RemoteUserBackend) di pengaturan [`AUTHENTICATION_BACKENDS`](/id/4.1/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/4.1/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/4.1/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/4.1/ref/contrib/auth/#django.contrib.auth.models.User.is_active) tidak akan diizinkan mengotentifikasi. Gunakan [`AllowAllUsersRemoteUserBackend`](/id/4.1/ref/contrib/auth/#django.contrib.auth.backends.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'
```

> **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/4.1/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/4.1/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/4.1/ref/middleware/#django.contrib.auth.middleware.RemoteUserMiddleware) dalam dokumentasi diatas.
