9

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

एप्लिकेशन स्वयं विभिन्न प्रोग्रामिंग भाषाओं में लिखे जाएंगे, इसलिए एक भाषा-तटस्थ दृष्टिकोण है की आवश्यकता है। मुझे यह सुझाव दिया गया था कि हम प्रमाणीकरण को संभालने के लिए ओपनआईडी या ओथ या इसी तरह के ढांचे का उपयोग कर सकते हैं लेकिन मेरी समझ यह है कि ये तीसरे पक्ष की सेवाओं के लिए हैं, न कि पहली पार्टी सेवाएं जो हमारे आंतरिक सिस्टम पर डेटा साझा करती हैं। इस मामले में, हमारे पास तीसरे पक्ष (या पार्टियों पर भरोसा करने वाले) के रूप में इलाज किए गए सभी अन्य अनुप्रयोगों के साथ एक केंद्रीय प्रदाता सेवा हो सकती है।

सवाल:

  1. OpenID/OAuth प्रथम-पक्ष सेवाओं में प्रमाणीकरण के लिए उपयुक्त हैं?
  2. यदि हां, तो इस उपयोग के मामले में प्रमाणीकरण स्थापित करने के लिए किसी को सलाह दी जाएगी?
  3. क्या उपयोगकर्ता को प्रत्येक प्रथम-पक्ष सर्वर को व्यक्तिगत अनुमति नहीं देनी चाहिए, जिसे वे उपयोग करना चाहते थे, जैसे कि उन्हें किसी भी तृतीय-पक्ष सर्वर को व्यक्तिगत अनुमति प्रदान करने की आवश्यकता होगी? मुझे लगता है कि यह सभी प्रथम-पक्ष सेवाओं तक पहुंचने के लिए एकल साइन-ऑन रखने की आवश्यकता का उल्लंघन करेगा।
  4. क्या इस प्रथम पक्ष के उपयोग के मामले में सहायता करने वाले साइटों के अच्छे उदाहरण हैं?
  5. इस प्रथम पक्ष के उपयोग के मामले के लिए एक अच्छा वैकल्पिक ढांचा क्या होगा?

उत्तर

7

आपको एसएसओ सेवाओं के लिए ओथ की आवश्यकता नहीं है।

ओएथ का प्राथमिक उपयोग/लाभ, जैसा कि आप पहले से जानते हैं, एक नियंत्रित तरीके से अपने संसाधन का उपयोग/उपयोग करने के लिए किसी तृतीय पक्ष ऐप तक पहुंच प्रदान करना है।

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

जहां तक ​​मैं समझता हूं, आप क्या कर सकते हैं, ओएथ की तरह कुछ ऐसा है जिससे आपका सर्वर ऐप पर टोकन भेजता है। (मुझे लगता है कि यह एक पूरी तरह से आंतरिक प्रणाली है, इसलिए टोकन का दुरुपयोग नहीं किया जा सकता है)।

तो बुनियादी तौर पर मैं क्या कर रहा हूँ का प्रस्ताव है:

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

एक अलग मॉड्यूल में लॉगिन + टोकन पीढ़ी + टोकन सत्यापन को अलग से अलग करें। सभी एपीआई को लॉगिन/टोकन सत्यापन के लिए इस मॉड्यूल का उपयोग करना चाहिए।

मैंने जो प्रस्ताव दिया है वह ओएथ की तरह काम करता है लेकिन सभी सुरक्षा पहलुओं को तोड़ दिया गया है क्योंकि आप इसे निजी क्लाउड में उपयोग करना चाहते हैं।

+0

पुष्टि के लिए धन्यवाद। यह जानना अच्छा है कि मैं ओथ या अन्य तीसरे पक्ष के ढांचे के साथ कुछ स्पष्ट नहीं खो रहा था। – Richard

1

ओथ कई अलग-अलग प्रकार के प्रवाह का समर्थन करता है। आप उपयोगकर्ता को प्रत्येक ऐप के लिए अनुमति देने के लिए कहने से बचने के लिए ओथ 2.0 से क्लाइंट क्रेंडेंशियल प्रवाह का उपयोग कर सकते हैं (यह उन मामलों के लिए है जहां आप सर्वर और ऐप दोनों को नियंत्रित करते हैं या जहां आप कुछ ऐप्स को पूर्व-प्राधिकृत करना चाहते हैं)। यह पोस्ट सब कुछ समझाते हुए एक अच्छी नौकरी करता है: http://tatiyants.com/using-oauth-to-protect-internal-rest-api/

संबंधित मुद्दे