Thursday, 15 January 2015

rest - How to use OpenID in RESTful API? -


मैं Pylons- आधारित वेब अनुप्रयोग का निर्माण कर रहा हूँ RESTful API के साथ, जो वर्तमान में किसी भी प्रमाणीकरण की कमी है इसलिए मैं इसे लागू करने जा रहा हूं और उपयोगकर्ता पासवर्ड संग्रहीत करने के साथ सभी परेशानी और सावधानी से बचने के लिए, मैं प्रमाणीकरण के लिए OpenID का उपयोग करना चाहता हूं। क्या सबसे अच्छा तरीका होगा यह करने का? क्या ये दो बातें संगत हैं? क्या ओपनआईड का उपयोग करने वाले मौजूदा एएसपी हैं जो मैं प्रेरणा ले सकता हूं?

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

तो सवाल को दो भागों में विभाजित किया जा सकता है,

  • मैं एपीआई के माध्यम से ओपनआईआईडी प्रमाणीकरण कैसे करूं
  • मैं कैसे "प्रमाणीकृत" "बाद के अनुरोधों में स्थिति

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

"प्रमाणीकृत" स्थिति को बनाए रखना

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

  • HTTPS + बुनियादी प्रमाणीकरण ("प्राधिकरण: बेसिक ..." प्रत्येक अनुरोध में हैडर) < / Li>
  • प्रत्येक अनुरोध में हस्ताक्षर अनुरोध ("प्राधिकरण: एडब्ल्यूएस ..." हैडर)
  • OAuth: एक्सेस टोकन प्राप्त करें, प्रत्येक अनुरोध में उस और अन्य मापदंडों का एक समूह शामिल करें
  • कुकी जो कि सत्र कुंजी को संग्रहीत करता है ("कुकी: ..." प्रत्येक अनुरोध में हैडर)
  • हस्ताक्षरित कुकी जो कि कुकी में ही सत्र की जानकारी संग्रहीत करता है

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

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


No comments:

Post a Comment