Bagaimana mengotentikasi menggunakan REMOTE_USERLink to this heading

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, CAS, 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.

PengaturanLink to this heading

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

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

Selanjutnya, anda harus mengganti ModelBackend dengan RemoteUserBackend di pengaturan AUTHENTICATION_BACKENDS

Code
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.

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
Python
 from django.contrib.auth.middleware import RemoteUserMiddleware


 class CustomHeaderRemoteUserMiddleware(RemoteUserMiddleware):
     header = "HTTP_AUTHUSER"

This custom middleware is then used in the MIDDLEWARE setting instead of django.contrib.auth.middleware.RemoteUserMiddleware:

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

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 masukLink to this heading

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.