# Dokumentasi Django 6.0.7

# Bagaimana mengotentikasi menggunakan `REMOTE_USER`

This document describes how to make use of external authentication sources 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, CAS, WebAuth, mod_auth_sspi, etc.

When the web server takes care of authentication it typically provides the authenticated user as `REMOTE_USER`. In Django, this value is made available in `request.META` (as `REMOTE_USER` when supplied as an environment variable, as in WSGI, or `HTTP_REMOTE_USER` when supplied via an HTTP header, as in ASGI). Django can be configured to make use of the `REMOTE_USER` value using the `RemoteUserMiddleware` or `PersistentRemoteUserMiddleware`, and `RemoteUserBackend` classes found in `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",
    ]

With this setup, `RemoteUserMiddleware` will detect the username in `request.META['REMOTE_USER']` (or `request.META['HTTP_REMOTE_USER']` under ASGI) and will authenticate and auto-login that user using the `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.

If your authentication mechanism uses a custom HTTP header and not `REMOTE_USER`, you can subclass `RemoteUserMiddleware` and set the `header` attribute to the desired `request.META` key. For example:

`mysite/middleware.py`

     from django.contrib.auth.middleware import RemoteUserMiddleware

     class CustomHeaderRemoteUserMiddleware(RemoteUserMiddleware):
         header = "HTTP_AUTHUSER"

Middleware penyesuaian digunakan dalam pengaturan `MIDDLEWARE` daripada `django.contrib.auth.middleware.RemoteUserMiddleware`:

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

Peringatan

`RemoteUserMiddleware` must not be deployed in configurations where a client can supply the header. You must be sure that your web server or reverse proxy always sets or strips that header based on the appropriate authentication checks, never permitting an end user to submit a fake (or "spoofed") header value.

Since the HTTP headers `X-Auth-User` and `X-Auth_User` (for example) both normalize to the `HTTP_X_AUTH_USER` key in `request.META`, you must also check that your web server doesn't allow a spoofed header using underscores in place of dashes.

Under WSGI, this warning doesn't apply to `RemoteUserMiddleware` in its default configuration with `header = "REMOTE_USER"`, since a key that doesn't start with `HTTP_` in `request.META` can only be set by your WSGI server, not directly from an HTTP request header.

This warning applies under ASGI in all configurations, because there is no equivalent for a WSGI server's ability to place a trusted value in the environ. ASGI deployments must use a reverse proxy as described above when using this middleware.

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.