Django 2.1 - Authenticating against Django’s user database from Apache

अपाचे से Django के उपयोगकर्ता डेटाबेस के खिलाफ प्रमाणीकरण




django

अपाचे से Django के उपयोगकर्ता डेटाबेस के खिलाफ प्रमाणीकरण

चूंकि अपाचे के साथ काम करते समय कई प्रमाणीकरण डेटाबेस को सिंक में रखना एक आम समस्या है, आप अपाचे को सीधे Django के प्रमाणीकरण प्रणाली के खिलाफ प्रमाणित करने के लिए कॉन्फ़िगर कर सकते हैं। इसके लिए अपाचे संस्करण> = 2.2 और mod_wsgi> = 2.0 की आवश्यकता है। उदाहरण के लिए, आप कर सकते हैं:

  • केवल प्रमाणित उपयोगकर्ताओं के लिए सीधे अपाचे से स्थिर / मीडिया फ़ाइलों की सेवा करें।
  • एक निश्चित अनुमति के साथ Django उपयोगकर्ताओं के खिलाफ एक Subversion भंडार तक पहुँच प्रमाणित करें।
  • कुछ उपयोगकर्ताओं को mod_dav के साथ बनाए गए WebDAV शेयर से कनेक्ट करने की अनुमति दें।

ध्यान दें

यदि आपने एक कस्टम उपयोगकर्ता मॉडल स्थापित किया है और इस डिफ़ॉल्ट is_active हैंडलर का उपयोग करना चाहते हैं, तो उसे is_active विशेषता का समर्थन करना चाहिए। यदि आप समूह आधारित प्राधिकरण का उपयोग करना चाहते हैं, तो आपके कस्टम उपयोगकर्ता के पास 'संबंधित' नाम का एक संबंध होना चाहिए, जिसमें संबंधित वस्तु है जिसका नाम 'नाम' फ़ील्ड है। यदि आपका कस्टम इन आवश्यकताओं के अनुरूप नहीं हो सकता है, तो आप अपने स्वयं के कस्टम mod_wsgi सामान्य हैंडलर को भी निर्दिष्ट कर सकते हैं।

mod_wsgi साथ प्रमाणीकरण

ध्यान दें

WSGIApplicationGroup %{GLOBAL} का उपयोग नीचे दिए गए कॉन्फ़िगरेशन में माना जाता है कि आपका Apache उदाहरण केवल एक Django एप्लिकेशन चला रहा है। यदि आप एक से अधिक Django एप्लिकेशन चला रहे हैं, तो इस सेटिंग के बारे में अधिक जानकारी के लिए mod_wsgi डॉक्स के डिफाइनिंग एप्लिकेशन ग्रुप्स सेक्शन को देखें।

सुनिश्चित करें कि mod_wsgi स्थापित और सक्रिय है और आपने mod_wsgi के साथ Apache सेटअप करने के चरणों का पालन किया है।

अगला, अपने अपाचे कॉन्फ़िगरेशन को एक स्थान जोड़ने के लिए संपादित करें जिसे आप केवल प्रमाणित उपयोगकर्ता देखना चाहते हैं:

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonPath /path/to/mysite.com

WSGIProcessGroup %{GLOBAL}
WSGIApplicationGroup %{GLOBAL}

<Location "/secret">
    AuthType Basic
    AuthName "Top Secret"
    Require valid-user
    AuthBasicProvider wsgi
    WSGIAuthUserScript /path/to/mysite.com/mysite/wsgi.py
</Location>

WSGIAuthUserScript निर्देश mod_wsgi को बताती है कि निर्दिष्ट wsgi स्क्रिप्ट में check_password फ़ंक्शन को निष्पादित करने के लिए, उपयोगकर्ता नाम और पासवर्ड से गुजरता है जो इसे प्रॉम्प्ट से प्राप्त करता है। इस उदाहरण में, WSGIAuthUserScript के समान है जो आपके एप्लिकेशन को परिभाषित करता है जो django-admin startproject द्वारा बनाया गया है

प्रमाणीकरण के साथ Apache 2.2 का उपयोग करना

सुनिश्चित करें कि mod_auth_basic और mod_authz_user लोड किए गए हैं।

इन्हें Apache में संकलित किया जा सकता है, या आपको अपने httpd.conf में गतिशील रूप से लोड करने के लिए LoadModule का उपयोग करने की आवश्यकता हो सकती है:

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authz_user_module modules/mod_authz_user.so

अंत में, अपने WSGI स्क्रिप्ट mysite.wsgi को check_password फ़ंक्शन को आयात करके अपाचे के प्रमाणीकरण को अपनी साइट के प्रमाणीकरण तंत्र से check_password लिए check_password करें:

import os

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

from django.contrib.auth.handlers.modwsgi import check_password

from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()

/secret/ से शुरू होने वाले अनुरोधों को अब प्रमाणित करने के लिए एक उपयोगकर्ता की आवश्यकता होगी।

Mod_wsgi अभिगम नियंत्रण तंत्र प्रलेखन प्रमाणीकरण के वैकल्पिक तरीकों के बारे में अतिरिक्त विवरण और जानकारी प्रदान करता है।

mod_wsgi और Django समूहों के साथ प्राधिकरण

mod_wsgi किसी समूह के सदस्यों के लिए किसी विशेष स्थान को प्रतिबंधित करने के लिए कार्यक्षमता प्रदान करता है।

इस मामले में, अपाचे विन्यास इस तरह दिखना चाहिए:

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py

WSGIProcessGroup %{GLOBAL}
WSGIApplicationGroup %{GLOBAL}

<Location "/secret">
    AuthType Basic
    AuthName "Top Secret"
    AuthBasicProvider wsgi
    WSGIAuthUserScript /path/to/mysite.com/mysite/wsgi.py
    WSGIAuthGroupScript /path/to/mysite.com/mysite/wsgi.py
    Require group secret-agents
    Require valid-user
</Location>

WSGIAuthGroupScript निर्देश का समर्थन करने के लिए, उसी WSGI स्क्रिप्ट mysite.wsgi को भी groups_for_user फ़ंक्शन को आयात करना चाहिए जो एक सूची समूह देता है जो दिए गए उपयोगकर्ता से संबंधित है।

from django.contrib.auth.handlers.modwsgi import check_password, groups_for_user

/secret/ लिए अनुरोधों के लिए अब उपयोगकर्ता को "गुप्त-एजेंटों" समूह का सदस्य होने की भी आवश्यकता होगी।