Drupal के सत्र प्रबंधन और उपयोगकर्ता प्रमाणीकरण को समझना


16

मेरे पास एक आवश्यकता है जहां, मुझे एक केंद्रीय सर्वर यानी एसएसओ सर्वर के प्रमाणीकरण के साथ डिफ़ॉल्ट उपयोगकर्ता प्रमाणीकरण को बदलना होगा।
Drupal डिबगिंग के द्वारा मुझे पता चला कि सभी सत्र प्रबंधन includes/session.incफ़ाइल में होता है । मैं छवि में दिखाए अनुसार प्रमाणीकरण करना चाहता हूं:

स्नैप

SCENARIO: लॉगिन
करें चरणों का विवरण होगा:

  1. SSO सर्वर पर उपयोगकर्ता नाम और पासवर्ड जमा करने के लिए लॉगिन फ़ॉर्म को बदलें ( Drupal पर नहीं , बल्कि .NET पर)।
  2. उस साइट के डेटाबेस का उपयोग करके एसएसओ सर्वर पर उपयोगकर्ता को प्रमाणित करें; और मेरी वेबसाइट (या एक मॉड्यूल द्वारा एक फार्म?) के कुछ कस्टम PHP पृष्ठ पर प्रतिक्रिया भेजें ।
  3. प्रतिक्रिया का उपयोग करते हुए, उपयोगकर्ता तालिका में उपयोगकर्ता की पहचान करें , और पासवर्ड की जांच के बिना उस उपयोगकर्ता के लिए एक सत्र बनाएं (जैसा कि इसका मतलब होगा डबल प्रमाणीकरण)। डिफ़ॉल्ट रूप से, Drupal एक कुकी को $insecure_session_nameचर के नाम से , और मान के साथ सेट करता है $sid। मैं चाहता हूं कि द्रुपाल यहां कुकी सेट न करें, इसके बजाय चर के मूल्यों को एसएसओ सर्वर पर भेजें।
  4. SSO सर्वर मान लेगा, एक कुकी बनाएगा, और इसे मुख्य डोमेन में छोड़ देगा domain.com(दोनों को याद दिलाने के लिए my websiteऔर sso serverमुख्य डोमेन के उप डोमेन पर हैं, जो कि Drupal में भी नहीं है)। फिर, drupal साइट उस कुकी का उपयोग करके लॉग इन कर सकती है।

मुझे पता है कि यह एक कठिन सवाल है, मैं सिर्फ संकेत की तलाश कर रहा हूं कि मुझे कैसे शुरू करना चाहिए? जैसा कि वे कहते हैं "आपको कोर को हैक नहीं करना चाहिए"। तो, मेरे सवाल हैं:

  1. मुझे यह समझने के लिए कहां देखना चाहिए कि ड्रुपल प्रमाणीकरण और सत्र प्रबंधन कैसे गहराई से काम करता है?
  2. क्या कोई ऐसा तरीका है जहां मैं फ़ंक्शंस का includes/session.incउपयोग करके फ़ंक्शंस को कॉल कर सकता हूं (जैसा कि फ़ंक्शंस के साथ टिप्पणी "आंतरिक उपयोग के लिए केवल संशोधित करने के लिए / नहीं संशोधित करने के लिए)"?

नोट: मैं उपयोगकर्ता को पंजीकृत करने के लिए उसी विधि का उपयोग करूंगा, ताकि रिकॉर्ड एसएसओ सर्वर के केंद्रीय डेटाबेस में बना रहे। और उस दौरान Drupal साइट के डेटाबेस में उसी उपयोगकर्ता के लिए कुछ जंक पासवर्ड डाल दिया जाएगा (जैसे लॉगिन करते समय पासवर्ड की जाँच नहीं की जाएगी)।


क्या आपको सच्चे SSO की आवश्यकता है (एक साइट पर लॉग इन करें और आप सभी साइटों में लॉग इन हैं), या सिर्फ एक बाहरी सिस्टम के खिलाफ प्रमाणित करें?
mpdonadio

@ एसएमपीडी मैं एक सच्चा एसएसओ चाहता हूं, जिसे एक साइट में लॉगिंग की आवश्यकता होगी और -> सभी साइटों पर एक ही उपयोगकर्ता को प्रमाणित करना होगा (ड्रुपल पर नहीं हो सकता है।
अजीत

यदि आप इसे सफलतापूर्वक लागू कर चुके हैं, तो आप विस्तृत जवाब डाल सकते हैं। मैं user_login_finalize का उपयोग कर रहा हूं, लेकिन मुझे GDPR मुद्दों के कारण बताया जा रहा है जो मैं Drupal में विवरण संग्रहीत नहीं कर सकता।
जिग्नेश रावल

जवाबों:


17

Drupal बाहरी प्रमाणीकरण का समर्थन करता है । Drupal के लिए कई विकल्प प्रमाणीकरण मॉड्यूल हैं, जैसे OpenID (कोर में शामिल), OAuth कनेक्टर , या LDAP । Drupal प्रमाणीकरण कैसे काम करता है इसके बारे में और जानें; OpenID और OAuth मॉड्यूल को देखने के लिए सबसे अच्छा होगा, और कोर लॉगिन फ़ॉर्म कॉलबैक सबमिट करें। लेकिन, AFAIK, वे हमेशा एक सफल प्रमाणीकरण के बाद सामान्य Drupal सत्र शुरू करते हैं।

सत्र प्रबंधन के लिए, Drupal PHP सत्र हैंडलिंग में प्लग करता है और इसे स्वयं संचालकों को पंजीकृत करता है। Drupal session backend अपने आप में प्लगेबल है, आप session_incवैरिएबल को किसी फ़ाइल के पथ पर सेट कर सकते हैं, जिसमें कार्य के वैकल्पिक कार्यान्वयन प्रदान करते हैं includes/session.incमेम्कैश मॉड्यूल इस का उपयोग सत्र स्टोर करने के लिए memcached है।

संदर्भ के लिए, OpenID मॉड्यूल सफल प्रमाणीकरण को संभालता हैopenid_authentication() जिसमें स्वयं खाता है और उपयोगकर्ता लॉगिन फ़ॉर्म सबमिट हैंडलर (यानी। user_login_submit()) कहता है । यह सबमिट हैंडलर स्वयं सरल है, यह सफलतापूर्वक प्रमाणित उपयोगकर्ता user_load()को वैश्विक $userचर में लोड करता है , यह तब कॉल करता है user_login_finalize()जो सत्र को संभालता है, userतालिका में लॉगिन टाइमस्टैम्प और hook_user_login()कार्यान्वयन को लागू करता है।

एक अन्य विकल्प user_external_login_register()फ़ंक्शन का उपयोग है । फ़ंक्शन बाहरी उपयोगकर्ता को लॉग इन करेगा। यदि आवश्यक हो तो यह एक स्थानीय उपयोगकर्ता भी बनाता है। आप स्थानीय उपयोगकर्ता निर्माण पर अधिक नियंत्रण की जरूरत है, तो आप हमेशा उपयोग कर सकते हैं user_save(), user_set_authmaps(), user_login_submit()और user_external_load()से आप कस्टम फोन का उपयोग कर user_external_login_register()क्या किया जाना चाहिए की टेम्पलेट के रूप में।


2
इस पर बहुत ज्यादा जगह है। बाहरी उपयोगकर्ताओं में लॉगिंग का Drupal पक्ष बहुत आसान है। भारी उठाने (यदि कोई हो) वास्तव में बाहरी प्रणाली के साथ हस्तक्षेप कर रहा है।
mpdonadio

@MPD विपरीत, मेरे विशेष मामले में ढूँढना। बाहरी प्रणाली = JSON वेब सेवा = अपेक्षाकृत आसान सामान। नाटकीय व्यवहार = अप्रत्याशित रूप से संस्करण से संस्करण में बदलना = नरक के रूप में कठिन और जब चीजें टूटती हैं तो कोई उपयोगी निदान नहीं।
तर्जका

1

user_authenticate () APi यहां काम आ सकता है।

3. प्रतिक्रिया का उपयोग करते हुए, उपयोगकर्ता तालिका में उपयोगकर्ता की पहचान करें , और पासवर्ड के लिए जाँच किए बिना उस उपयोगकर्ता के लिए एक सत्र बनाएं (जैसा कि इसका अर्थ होगा डबल प्रमाणीकरण)। डिफ़ॉल्ट रूप से, Drupal एक कुकी को $insecure_session_nameचर के नाम से , और मान के साथ सेट करता है $sid। मैं चाहता हूं कि द्रुपाल यहां कुकी सेट न करें, इसके बजाय चर के मूल्यों को एसएसओ सर्वर पर भेजें।

EDIT: एक बार SSO सर्वर उपयोगकर्ता को लॉगिन करने के लिए इस API का सही उपयोग करता है जो स्वचालित रूप से आपके लिए सत्रों की देखभाल करेगा। मुझे लगता है कि यदि आप user_authenticate()सत्रों को स्वयं बनाने की बजाय इसका उपयोग करते हैं तो बेहतर है । जब तक वैध p-assowrd प्रदान किया जाता है तब तक यह एक दोहरे प्रमाणीकरण को भी समस्याग्रस्त कर सकता है।

4. यकीन नहीं है कि क्या आप चाहते हैं कि कुकी दोनों डोमेन में दिखाई दे? यदि ऐसा है तो सेटिंग में $cookie_domain। डोमेन को इनिशियलाइज़ करें। फिर सबसाइट में कुकीज़ मूल साइट में उपलब्ध होंगी।


आपकी प्रतिक्रिया के लिए धन्यवाद। मैं उपयोग नहीं कर सकता user_authenticate, क्योंकि प्रमाणीकरण को Drupal साइट पर होने की आवश्यकता नहीं है। मैं सत्र को कॉल करके drupal_session_generate()और drupal_session_regenerate()session.inc फ़ाइल से उत्पन्न कर सकता हूं । आपको कुकी की आवश्यकता के बारे में यह सही लगा .. कृपया संपादन देखें।
अजीत

@indrock उस लिंक की जाँच करें। User_authenticate आपको उपयोगकर्ता को लॉगिन करने की अनुमति देगा बशर्ते उपयोगकर्ता नाम और पासवर्ड सही हो। चरण 3 में जब आप यह सत्यापित करते हैं कि उपयोगकर्ता नाम और पास एसएसओ सर्वर पर सही है तो उपयोगकर्ता को लॉगिन करने के लिए इस एपीआई का उपयोग करें। लेकिन आपके पास Drupal पर रखा गया पासवर्ड होना चाहिए। ऐसा करने से यह हैकिंग कोर की तुलना में बहुत आसान हो जाएगा।
GoodSp33d
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.