मुझे प्रमाणीकरण के लिए 3rd पार्टी (यानी Google, Facebook, Twitter) का उपयोग करने के लिए एक Restful webservice को कैसे आर्किटेक्ट करना चाहिए?


25

मेरी नौकरी के लिए हमारे पास एक अच्छा रैस्टफुल वेबसर्विस है जिसे हमने बनाया है कि हम एक दो वेबसाइटों को चलाने के लिए उपयोग करते हैं। मूल रूप से webservice आपको समर्थन टिकट बनाने और काम करने देती है, और वेबसाइट अंतिम छोर के लिए जिम्मेदार है। कोई भी webservice अनुरोध एक ऐसे हेडर का उपयोग करता है जिसका उपयोग हम प्रत्येक कॉल के लिए उपयोगकर्ता और उनके पासवर्ड को मान्य करने के लिए करते हैं।

इस वर्ष हम अपने प्रवेश विकल्पों का विस्तार करना चाह रहे हैं ताकि वेबसाइट पर मौजूद उपयोगकर्ता Google, ट्विटर और फेसबुक (संभवतः अन्य) के माध्यम से लॉग इन कर सकें। हालाँकि, मुझे यह पता लगाने में बहुत परेशानी हो रही है कि इसे कैसे आर्किटेक्ट किया जाए ताकि उपयोगकर्ताओं को यह सुनिश्चित करने के लिए कि वे हैं, वेब्स सर्विस 3 पार्टी प्रमाणीकरण प्रदाताओं का उपयोग कर सकें। क्या ऐसा करने के लिए कोई सर्वोत्तम प्रथा है?

वर्तमान में हम यह सोच रहे हैं कि वेबसाइट खुद को उपयोगकर्ताओं को प्रमाणित करने के लिए संभाल ले, और फिर एक नए सेटसाइडआईड कॉल का उपयोग करें जो कि वेबसर्विस बैक एंड के साथ अपने वर्तमान सत्र को पंजीकृत करता है। Webservice के लिए प्रत्येक अतिरिक्त अनुरोध उस सेशन के साथ गुजरेगा और इसे मान्य करेगा। ये ठीक लगता है, लेकिन मुझे अपने सिर के पीछे यह अहसास है कि मैं इसके माध्यम से नहीं सोच रहा हूं और अपने सभी फोरम ब्राउजिंग और ओउथ और ओपनिड स्पेक्स को पढ़ना सिर्फ मुझे भ्रमित कर रहा है। इससे निपटने के लिए कोई सुझाव?


आप जो सुझाव दे रहे हैं, उसमें कुछ भी गलत नहीं है। मैं वास्तविक oauth और openid चश्मा की तुलना में ओपनिड इंटीग्रेशन उदाहरण कोड को देखना आसान समझता हूं ...
अंतरिक्ष यात्री

आप किस भाषा / मंच का उपयोग कर रहे हैं? आपको पहिया को सुदृढ़ करने की आवश्यकता नहीं है, क्योंकि आपकी मदद करने के लिए चौखटे हैं। :)
RobM

@Rob webservice Salesforce.com पर होस्ट की गई है, लेकिन एक प्रॉक्सी के माध्यम से इसे एक्सेस किया जाता है, जो इस लेखन के रूप में Node.js. उन्होंने कहा कि ऐसा लगता है कि सामान्य प्रश्न सभी प्लेटफार्मों पर लागू होगा। और हाँ, मुझे उम्मीद है कि पहिए को फिर से लगाने के बजाय एक फ्रेमवर्क का उपयोग किया जाएगा, बस यह सुनिश्चित नहीं करना चाहिए कि किस पहिये का उपयोग किया जाए।
राल्फ कैलावे

@ राल्फ येप, सामान्य प्रश्न प्लेटफ़ॉर्म के बावजूद है, लेकिन इसके व्यावहारिक निहितार्थ हैं, क्योंकि प्लेटफ़ॉर्म आमतौर पर आपके रूपरेखा विकल्पों को काफी कम कर देगा। इसलिए, आपने एक बिक्री-होस्टेड वेब सेवा और डेटा रिपॉजिटरी में नोड.जेएस का उपयोग करके एक कस्टम निर्मित फ्रंट-एंड ऐप बनाया है? क्या आपको बैकएंड में उपयोगकर्ता / पहचान की जानकारी संग्रहीत करने की आवश्यकता है, या फ्रंट-एंड में कार्यों पर सिर्फ प्रमाणीकरण और प्राधिकरण है?
RobM

@RobM हाँ, हम बैकएंड पर उपयोगकर्ता जानकारी संग्रहीत करना चाहते हैं, अर्थात ईमेल, फर्स्टनाम, लास्टनाम, प्लस वेब्सवेस्टर उपभोक्ताओं से भविष्य की कॉल की पुष्टि करने के लिए जो भी आवश्यक हो, एक बार वे प्रमाणित हो जाने के बाद।
राल्फ कॉलवे

जवाबों:


14

ऐसा लगता है कि दो लक्ष्य हैं:

  1. एंड-यूजर्स के लिए अपने मौजूदा सोशल अकाउंट्स के साथ प्रमाणित करना आसान है
  2. डेवलपर्स के लिए आपके वेब सेवा का उपयोग करना आसान है

आपकी साइट पर संसाधनों का उपयोग करने के लिए लोगों को अधिकृत करना क्लाइंट लाइब्रेरी की लोकप्रियता और उपलब्धता के कारण OAuth2 को एक पसंदीदा तंत्र बनाता है।

1. एंड-यूजर्स के लिए अपने मौजूदा सोशल अकाउंट्स के साथ प्रमाणित करना आसान

एंड-यूज़र एक ऐसी साइट पर जाता है जो आपके एपीआई का उपयोग करती है और लॉगिन करने का विकल्प चुनती है। उन्हें आपके OAuth लॉगिन पृष्ठ पर भेजा जाता है। आपका लॉगिन पृष्ठ आपकी साइट पर प्रबंधित खातों के लिए एक सामान्य उपयोगकर्ता नाम और पासवर्ड संकेत दिखाता है और एक सामाजिक स्रोत बटन है जहां वे फेसबुक जैसी साइट के माध्यम से लॉगिन करने के लिए क्लिक कर सकते हैं। जब उपयोगकर्ता फेसबुक चुनता है तो आप उन्हें फेसबुक पर पुनर्निर्देशित करते हैं ताकि वह चुनाव को मंजूरी दे सके (फेसबुक ऑर्ट फ्लो शुरू करते हुए)। जब एंड-यूज़र फेसबुक पर लॉगिन पूरा कर लेते हैं तो उन्हें आपकी साइट पर वापस भेज दिया जाता है।

जब उपयोगकर्ता फेसबुक से आपकी साइट पर वापस भेज दिया जाता है तो आप उस उपयोगकर्ता की जानकारी को अपने डेटाबेस में उपयोगकर्ता रिकॉर्ड में सहेजते हैं और फिर उस उपयोगकर्ता के लिए एक नया सत्र उत्पन्न करते हैं। आप तुरंत मूल-उपयोगकर्ता को उनके मूल डाउनस्ट्रीम साइट पर oauth access_token के साथ भेजते हैं, जो मूल oauth प्रवाह को पूरा करता है।

2. अपने वेब सेवा का उपयोग करने वाले डेवलपर्स के लिए आसान

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

आपकी अच्छी बाकी एपीआई का उपयोग करने वाले डेवलपर के लिए, वे फेसबुक इंटरैक्शन के बारे में नहीं जानते होंगे जब तक कि आप उन्हें सत्र कैप्चर पोस्ट (उदाहरण के लिए) के माध्यम से संकेत देना नहीं चुनते।

टी एल; डॉ

OAuth2 को लागू करके और सामाजिक रूप से जटिल जटिलताओं को छिपाकर अपने API के उपभोक्ताओं को अपने जैसा बनाएं। आप अपने डाउनस्ट्रीम साइटों के लिए अपने oauth प्रवाह के दौरान, facebook के साथ एक अतिरिक्त oauth प्रवाह को ट्रिगर कर सकते हैं।

चित्र क्योंकि चित्र == शब्द * 1000:

यहाँ छवि विवरण दर्ज करें

क्या हम इसे oauth2-piggy-back कह सकते हैं?

कदम से कदम प्रवाह

  1. अंत उपयोगकर्ता का दौरा साइट है कि अपने एपीआई का उपयोग करता है
  2. अंतिम उपयोगकर्ता आपकी साइट पर अधिकृत या साइनअप करने के लिए भेजा गया है (oauth2)
  3. अंतिम उपयोगकर्ता सामाजिक विशेषाधिकार चुनता है, फेसबुक लॉगिन बटन पर क्लिक करता है
  4. आपकी साइट कुकी सेट करती है या stateफ़ेसबुक ऑउथ में सेट करती है ताकि पता चल सके कि उपयोगकर्ता कहाँ से आया है
  5. अंतिम उपयोगकर्ता फ़ेसबुक पर रीडायरेक्ट हो जाता है और फ़ेसबुक साइट पर कनेक्शन स्वीकार कर लेता है
  6. अंतिम उपयोगकर्ता फेसबुक साइट प्रक्रिया को पूरा करने के लिए आपकी साइट पर पुनर्निर्देशित
  7. आप अपने डेटाबेस में उपयोगकर्ता को देखते हैं या बनाते हैं
  8. आप अपने सर्वर पर एक नया सत्र बनाएँ
  9. आप अपने सत्र टोकन के साथ उपयोगकर्ता को उनकी मूल साइट पर वापस भेज देते हैं

5

इसे कैसे एक्स्टेंसिबल बनाया जाए

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

आपको दुर्भाग्य से उनमें से दो की आवश्यकता है, क्योंकि ट्विटर ने अभी भी OAuth2 बैंडवागन को नहीं छेड़ा है।

OAuth को प्रामाणिक पार्टी के लिए एक इंटरफ़ेस बनाने की आवश्यकता है। टोकन का सर्वर से सर्वर से आदान-प्रदान किया जाएगा। एक प्रविष्टि बिंदु बनाएं, जो सभी संचार को संभाल सकता है।

टोकन को आपके खाते से अलग तालिका में संग्रहीत किया जाना चाहिए, ऐसा इसलिए है क्योंकि उनके कई टोकन और कई लिंक किए गए प्रोफाइल हो सकते हैं। कुछ सेवाएं आपको दो टोकन देती हैं, उनमें से एक एक ताज़ा टोकन है।

अब आप एक इंटरफ़ेस डिज़ाइन करते हैं, जो आपके लिए आवश्यक अन्य कार्यक्षमता को एन्क्रिप्ट करता है। मैं व्यक्तिगत रूप से इसके लिए एक अलग REST सेवा सेटअप करूँगा। इस तरह आप आसानी से प्रमाणीकरण को अन्य स्थानों तक बढ़ा सकते हैं।
कुछ सेवाएं JSON का उपयोग संचार करने के लिए करती हैं, अन्य XML आदि के लिए जाती हैं। सामने वाले उपयोगकर्ता के लिए आपको उन सभी को एकजुट करने की आवश्यकता होती है। यह एक बहुत ही दर्दनाक प्रक्रिया है, लेकिन यहां कुछ सामान्य आधारों को प्राप्त करना संभव है।

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

यह सब यह सुनिश्चित करेगा कि आप आसानी से नए तीसरे पक्ष के प्रदाताओं को जोड़ सकते हैं।

टोकन समस्याओं

टोकन समय में सीमित हैं, इस प्रकार आपको कुछ क्रोन नौकरियों की आवश्यकता है, जो यह जांच सकते हैं कि टोकन अभी भी उपयोग करने योग्य है, अन्यथा आपको इसे हटाना होगा। आप इस तंत्र द्वारा एक टोकन भी ताज़ा कर सकते हैं।

यह कभी-कभी होता है, कि एक उपयोगकर्ता टोकन वापस ले लेता है। इसके लिए तैयार रहें।

आधार सामग्री भंडारण

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

अतिरिक्त सत्यापन के लिए, आप प्रोफ़ाइल को एक अलग, लेकिन लिंक की गई तालिका अपने उपयोगकर्ताओं के लिए संग्रहीत कर सकते हैं। यह आपको किसी के बारे में और अधिक जानकारी प्रदान करेगा।

अपने स्थानीय कानूनों की भी जांच करें, कुछ डेटा के लिए आपको अतिरिक्त सावधानी बरतने की आवश्यकता है।

अंतिम बात यह मत करो कि आप अपनी सेवाओं पर खाता नहीं बनाते हैं। यदि उपयोगकर्ता फेसबुक से प्रतिबंधित हो जाता है, तो वह प्रभावी रूप से आपकी सेवा में प्रवेश करने में असमर्थ होगा। यह एक ऐसी स्थिति है जिसे आप बनाना नहीं चाहते हैं। यह अक्सर अनदेखी की जाती है।


1

मैं निश्चित रूप से उस समाधान के साथ जाऊंगा जो आपको लगता है कि आप पहले से ही पता लगा चुके हैं: अपने ग्राहक-सामना करने वाली वेबसाइट पर 3 पार्टी प्रमाणीकरण को लागू करना और फिर उन 3 पार्टी ऑर्किट टोकन को अपनी वेबसाइट के उपयोगकर्ता खातों के साथ जोड़ना, और फिर अंत में अपना सेटस्वाइड कॉल चालू करना लॉग इन करें।

अपनी वेबसाइट की वास्तुकला के आधार पर, आप बहुत उपयोगी होने के लिए एवरीथ या पासपोर्ट जैसे पुस्तकालय का उपयोग कर सकते हैं ।


1

मेरे दो सेंट: मैंने पहले कभी भी ऐसा कुछ नहीं किया है और न ही मुझे पता है कि एफबी, ट्विटर या Google लॉगिन तंत्र कैसे काम करते हैं, लेकिन जैसे ही मैंने आपके प्रश्न को पढ़ा, मेरे दिमाग में कुछ मुद्दे आ गए।

  • एकाधिक लॉगिन: यदि मैं एक दिन अपने फेसबुक अकाउंट से लॉग इन करता हूं और अगले दिन मेरा Google खाता होता है? या एक साथ? क्या आप इन दोनों खातों को अद्वितीय, अलग खाते के रूप में मानते हैं या आपके पास दोनों को मिलाने के लिए कोई तरीका होना चाहिए और मुझे अपने टिकट तक पहुंचने की अनुमति देनी चाहिए?
  • बाहरी पहचानकर्ताओं पर भरोसा करना: जब फेसबुक या ट्विटर अपने खाता पहचानकर्ताओं को देखने के तरीके को बदलने का फैसला करता है, तो क्या होता है? वर्णन करने के लिए, यदि बाजलोगिन कोड {4382-af56} का उपयोग करके एक अद्वितीय खाते का प्रतिनिधित्व करता है, लेकिन यह तय करता है कि अब से खातों में 12 अंक होंगे, क्योंकि 8 पर्याप्त नहीं थे, आप {1200-4382-af56 से {0000-4382 कैसे बताते हैं -af56}?

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

मुझे यकीन नहीं है कि मैंने उन मुद्दों को संबोधित किया था जो आपके दिमाग में थे, लेकिन आपने वास्तव में किसी भी ठोस चिंताओं का उल्लेख नहीं किया है। मुझे उम्मीद है कि मेरा जवाब दोनों तरह से सहायक था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.