Django 2.1 - Authentication using REMOTE_USER

REMOTE_USER का उपयोग करके प्रमाणीकरण




django

REMOTE_USER का उपयोग करके प्रमाणीकरण

यह दस्तावेज़ वर्णन करता है कि आपके Django अनुप्रयोगों में बाहरी प्रमाणीकरण स्रोतों (जहां वेब सर्वर REMOTE_USER पर्यावरण चर सेट करता है) का उपयोग कैसे करें। इस प्रकार का प्रमाणीकरण समाधान आमतौर पर इंट्रानेट साइटों पर देखा जाता है, जिसमें सिंगल साइन-ऑन समाधान जैसे कि IIS और इंटीग्रेटेड विंडोज ऑथेंटिकेशन या अपाचे और WebAuth , CAS , Cosign , WebAuth , WebAuth , आदि होते हैं।

जब वेब सर्वर प्रमाणीकरण का ध्यान रखता है तो यह आमतौर पर अंतर्निहित एप्लिकेशन में उपयोग के लिए REMOTE_USER पर्यावरण चर सेट करता है। Django में, REMOTE_USER request.META में उपलब्ध कराया गया है। request.META विशेषता। Django को RemoteUserMiddleware या PersistentRemoteUserMiddleware और RemoteUserBackend वर्गों का उपयोग करते हुए django.contrib.auth में REMOTE_USER मान का उपयोग करने के लिए कॉन्फ़िगर किया जा सकता है।

विन्यास

सबसे पहले, आपको MIDDLEWARE बाद MIDDLEWARE को MIDDLEWARE सेटिंग में django.contrib.auth.middleware.AuthenticationMiddleware

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

इसके बाद, आपको AUTHENTICATION_BACKENDS सेटिंग में ModelBackend साथ ModelBackend को बदलना होगा:

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.RemoteUserBackend',
]

इस सेटअप के साथ, RemoteUserMiddleware request.META['REMOTE_USER'] में उपयोगकर्ता नाम का पता लगा लेगा। RemoteUserMiddleware request.META['REMOTE_USER'] और उस उपयोगकर्ता को RemoteUserBackend का उपयोग करके प्रमाणित और ऑटो-लॉगिन करेगा।

ज्ञात हो कि यह विशेष सेटअप डिफॉल्ट ModelBackend साथ प्रमाणीकरण को अक्षम करता है। इसका अर्थ है कि यदि REMOTE_USER मान सेट नहीं है, तो उपयोगकर्ता Django के व्यवस्थापक इंटरफ़ेस का उपयोग करते हुए भी लॉग इन करने में असमर्थ है। AUTHENTICATION_BACKENDS सूची में 'django.contrib.auth.backends.ModelBackend' जोड़ने से REMOTE_USER अनुपस्थित होने पर एक ModelBackend रूप में ModelBackend का उपयोग किया जाएगा, जो इन मुद्दों को हल करेगा।

Django के उपयोगकर्ता प्रबंधन, जैसे कि contrib.admin में contrib.admin और createsuperuser प्रबंधन आदेश, दूरस्थ उपयोगकर्ताओं के साथ एकीकृत नहीं करता है। ये इंटरफेस AUTHENTICATION_BACKENDS परवाह किए बिना डेटाबेस में संग्रहीत उपयोगकर्ताओं के साथ काम करते हैं।

ध्यान दें

चूंकि ModelBackend से विरासत में ModelBackend , इसलिए आपके पास अभी भी वही सभी अनुमतियाँ ModelBackend जो ModelBackend में कार्यान्वित की ModelBackend

is_active=False उपयोगकर्ताओं को प्रमाणित करने की अनुमति नहीं दी जाएगी। यदि आप उन्हें अनुमति देना चाहते हैं, तो AllowAllUsersRemoteUserBackend उपयोग करें।

यदि आपका प्रमाणीकरण तंत्र एक कस्टम HTTP शीर्ष लेख का उपयोग करता है और REMOTE_USER नहीं, तो आप RemoteUserMiddleware को उप-वर्ग कर सकते हैं और header विशेषता को इच्छित request.META सेट कर सकते हैं। RemoteUserMiddleware कुंजी। उदाहरण के लिए:

from django.contrib.auth.middleware import RemoteUserMiddleware

class CustomHeaderMiddleware(RemoteUserMiddleware):
    header = 'HTTP_AUTHUSER'

चेतावनी

यदि एक RemoteUserMiddleware HTTP हेडर के साथ एक RemoteUserMiddleware उपवर्ग का उपयोग कर बहुत सावधान रहें। आपको यह सुनिश्चित करना चाहिए कि आपका फ्रंट-एंड वेब सर्वर हमेशा उचित प्रमाणीकरण जांच के आधार पर उस हेडर को सेट या स्ट्रिप्स करता है, जो कभी भी एक नकली (या "स्पूफ़्ड") हेडर वैल्यू सबमिट करने के लिए एंड-यूज़र को अनुमति नहीं देता है। चूंकि HTTP हेडर X-Auth-User और X-Auth_User (उदाहरण के लिए) दोनों request.META में HTTP_X_AUTH_USER कुंजी को सामान्य करते हैं। HTTP_X_AUTH_USER , आपको यह भी देखना होगा कि आपका वेब सर्वर डैश के स्थान पर अंडरस्कोर का उपयोग करके एक स्पूफ हेडर की अनुमति नहीं देता।

यह चेतावनी header = 'REMOTE_USER' साथ अपने डिफ़ॉल्ट कॉन्फ़िगरेशन में RemoteUserMiddleware लागू नहीं होती है, क्योंकि एक कुंजी जो HTTP_ से request.META में शुरू नहीं होती है। HTTP_ केवल आपके WSGI सर्वर द्वारा सेट किया जा सकता है, सीधे HTTP अनुरोध हेडर से नहीं।

यदि आपको अधिक नियंत्रण की आवश्यकता है, तो आप अपना स्वयं का प्रमाणीकरण बैकएंड बना सकते हैं जो कि रिमोटयूसेबेंडेंड से विरासत में मिलता है और इसकी एक या अधिक विशेषताओं और विधियों को ओवरराइड करता है।

REMOTE_USER का उपयोग केवल लॉगिन पृष्ठों पर करें

RemoteUserMiddleware प्रमाणीकरण मिडलवेयर मानता है कि HTTP अनुरोध शीर्ष लेख REMOTE_USER सभी प्रामाणिक अनुरोधों के साथ मौजूद है। जब htpasswd या अन्य सरल तंत्रों के साथ बेसिक HTTP प्रामाणिक का उपयोग किया जाता है, तो यह अपेक्षित और व्यावहारिक हो सकता है, लेकिन Negotiate (GSSAPI / Kerberos) या अन्य संसाधन गहन प्रमाणीकरण विधियों के साथ, फ्रंट-एंड HTTP सर्वर में प्रमाणीकरण आमतौर पर केवल एक के लिए है या कुछ लॉगिन URL और सफल प्रमाणीकरण के बाद, आवेदन को प्रमाणित सत्र को बनाए रखना चाहिए।

PersistentRemoteUserMiddleware इस उपयोग के मामले के लिए समर्थन प्रदान करता है। यह उपयोगकर्ता द्वारा स्पष्ट लॉगआउट होने तक प्रमाणित सत्र बनाए रखेगा। वर्ग का उपयोग ड्रॉप-इन प्रतिस्थापन के रूप में किया जा सकता है।