मैं अलग डोमेन में कई साइटों है: example.com
, example.org
, mail.example.com
और passport.example.org
। सभी साइटों में आम दिखने और महसूस हो रहा है और समान उपयोगकर्ता आधार साझा करना चाहिए।पारदर्शी उपयोगकर्ता सत्र (एकल साइन-ऑन + एकल साइन-बंद)
और इस तरह के चरम मामले मैं अभी भी पारदर्शी रूप से को सभी साइटों चाहते कुंजी गुण निम्नलिखित के साथ (जितना संभव हो उतना) उपयोगकर्ता शेयर सत्रों में:
एकल साइन-ऑन। में लॉग इन के रूप में वह व्यवहार किया जाना चाहिए
उपयोगकर्ताओं में लॉग इन मिलता है "नमस्ते,
$username
" साइट के शीर्षक और विभिन्न नेविगेशन मेनू में अभिवादन, लिस्टिंग सेवाओं वे के लिए उपयोग किया - जबpassport.example.org
पर पर उपयोगकर्ता चिन्ह और यात्राओं किसी भी अन्य साइट। । अगर वह साइन इन नहीं है, तो ग्रीटिंग के बजाय "साइन ऑन" लिंक है, जोpassport.example.org/signon
पर इंगित करता है।विश्वसनीय डोमेन की सूची ज्ञात है, इसलिए ओपनआईडी के साथ या कुछ होमबर्न हल्के प्रोटोकॉल के साथ को लागू करना काफी आसान है। जब उपयोगकर्ता पहली बार साइट पर हिट करता है, तो मैं उसे
passport.example.org
, पर विशेष प्रमाणीकरण समापन बिंदु पर रीडायरेक्ट कर रहा हूं, जो तब पहचान जानकारी (या " अज्ञात पहचान पर हस्ताक्षर नहीं किया गया) के साथ चुपचाप उसे वापस रीडायरेक्ट करता है। अधिकांश ब्राउज़रों के लिए यह पूरी तरह से पारदर्शी है। जाहिर है, मैं पुनर्निर्देशन loops से लड़ने के लिए nonce मूल्यों का उपयोग कर रहा हूँ।एकल साइन-ऑफ। जब उपयोगकर्ता किसी भी साइट के शीर्षलेख में "साइन ऑफ़" पर क्लिक करता है अगली बार जब वह किसी भी साइट पर जाता है - उसे "साइन ऑन नहीं" के रूप में देखा जाना चाहिए।
ओपनआईडी इस के लिए डिज़ाइन नहीं किया गया था। मेरा वर्तमान विचार (मेरे पास पहले से ही आंशिक रूप से काम कर रहा है कार्यान्वयन) उपयोगकर्ता पहचान नहीं भेजना है, बल्कि "वैश्विक" सत्र टोकन और डीबी में वैश्विक सत्र तालिका (global_session_token ↔ उपयोगकर्ता संबंध) साझा करना है।
रोबोट और कुकीज-उपयोगकर्ता का समर्थन करते हैं। साइट्स में सार्वजनिक क्षेत्र हैं, जिन्हें किसी भी कुकी समर्थन के बिना उपयोगकर्ता-एजेंटों द्वारा पहुंचा जा सकता है।
इस वजह से, मैंने (1) में वर्णित पुनर्निर्देशन एक समस्या बन गई है, क्योंकि प्रत्येक पृष्ठ अनुरोध के लिए, मैं उपयोगकर्ता-एजेंट को एंड एंडपॉइंट और पीछे वापस फेंक दूंगा। न केवल यह रोबोट को भ्रमित करेगा, लेकिन यह मेरे सत्र डेटाबेस को मृत-जन्म-सत्र सत्रों के साथ बहुत जल्दी प्रदूषित करेगा। और मैं निश्चित रूप से "हे, प्रदर्शित करना नहीं चाहता हूं, आपके पास कुकीज़ सक्षम नहीं है, चले जाओ!" पृष्ठ, जो बेहद कठोर और निराशाजनक होगा। जबकि मुझे लॉगिन करने के लिए कुकी समर्थन की आवश्यकता है, मैं चाहता हूं कि उपयोगकर्ता बिना किसी प्रतिबंध के साइटें कितनी आसानी से पढ़ सकें।
और मैं स्पष्ट रूप से कुछ पारदर्शी क्रॉस-डोमेन पुनर्निर्देशन के अलावा यूआरएल में सत्र आईडी डालना चाहता हूं। मुझे विश्वास है कि ऐसा करना एक सुरक्षा समस्या है और आमतौर पर एक बुरी बात है।
और यहां मैं लगभग विचारों से बाहर हूं।
ठीक है, मैं जानता हूँ कि यह मुश्किल है, लेकिन गूगल वास्तव में साथ किसी भी तरह से करता है (google.com
, google.
बहुत के- gTLDs, gmail.com
और इसी तरह), है ना? तो यह होना चाहिए।
मैं या तो प्रोटोकॉल विवरण विचारों के लिए आभारी (है कि सबसे अच्छा होगा) या लिंक सिस्टम को (या तो कोड को पढ़ने के लिए या सिर्फ देखने और जानने के लिए पर साइटों रहते हैं) पहले से ही सफलतापूर्वक कुछ इस तरह लागू करने होंगे।
इसे समेटने के लिए: सामान्य डोमेन, साझा उपयोगकर्ता आधार, एकल साइन-ऑन, एकल साइन-ऑफ़ के बिना कई डोमेन, गुमनाम रूप से ब्राउज़ करने के लिए आवश्यक कोई कुकी नहीं है।
साइटों की सभी एक ही नेटवर्क पर कर रहे हैं (लेकिन अलग सर्वर पर आराम) और आंशिक रूप से ही PostgreSQL डेटाबेस का हिस्सा (एक ही डाटाबेस की विभिन्न योजनाओं में आराम कर)। अधिकांश साइटें पाइथन/डीजेगो के साथ लिखी जाती हैं, लेकिन उनमें से कुछ रेल पर PHP और रूबी का उपयोग कर रही हैं। जबकि मैं कुछ ढांचे के बारे में सोच रहा हूं- और भाषा-अज्ञेयवादी, मैं किसी भी कार्यान्वयन को इंगित करने के लिए आभारी हूं। यहां तक कि अगर मैं उनका उपयोग नहीं कर पाऊंगा, अगर मुझे यह पता चलेगा कि यह कैसे किया गया है तो शायद मैं कुछ इसी तरह लागू करने में सक्षम हो जाऊंगा।
नहीं, यह मुश्किल नहीं है। यह सिर्फ एक चाल है, जैसे कार्ड-ट्रिक्स। एक बार जब आप जानते हैं कि यह कैसे आसान है। :-) –