How to authenticate using REMOTE_USERLink to this heading
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, CAS, Cosign,
WebAuth, 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 attribute. 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.
PengaturanLink to this heading
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.
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'
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.