2013-10-17 5 views
10

एंगुलर.जेएस (फ्लास्क बैक-एंड वेब ऐप के साथ) में ओपनआईडी आधारित प्रमाणीकरण कैसे कार्यान्वित करता है?Angular.js (फ्लास्क बैकएंड के साथ) में ओपनआईडी आधारित प्रमाणीकरण

ऐसा लगता है कि Angular.js कोड उदाहरण found here.

की तरह तर्क शामिल करने के लिए हालांकि जरूरत की तरह, बोतल पक्ष भी एक OpenID सत्यापन प्रणाली होनी चाहिए।
क्या बैकएंड और फ्रंटेंड दोनों के लिए तर्क लिखने के लिए "अनुशंसित" तरीका है?
क्या कोई github उदाहरण है या स्टार्टर्स के लिए कुछ अन्य संबंधित संसाधन है?

उत्तर

21

दुर्भाग्य से मेरे पास साझा करने के लिए नमूना आवेदन नहीं है, लेकिन यहां एक उच्च स्तर का वर्णन है जो मुझे आशा है कि उपयोगी है।

  1. उपयोगकर्ता एक लॉगिन के रूप में प्रवेश करती है OpenID URL और सर्वर
  2. सर्वर हो जाता है करने के लिए प्रस्तुत:

    के एक पल आप एक AngularJS ऐप है और आप की समीक्षा कैसे OpenID प्रमाणीकरण विनिमय काम करता है कि के लिए भूल जाते हैं चलो ओपनआईडी यूआरएल और ओपनआईडी प्रदाता को रीडायरेक्ट के साथ प्रतिक्रिया देता है। रीडायरेक्ट में कॉलबैक यूआरएल सहित कुछ तर्क शामिल हैं।

  3. ओपनआईडी प्रदाता उपयोगकर्ता को लॉगिन प्रमाण-पत्र दर्ज करने के लिए संकेत देता है और उसके बाद सर्वर एप्लिकेशन के साथ उसकी पहचान साझा करने की अनुमति देता है।
  4. ओपनआईडी प्रदाता चरण 2 में कॉलबैक के रूप में दिए गए यूआरएल पर एप्लिकेशन पर रीडायरेक्ट के साथ प्रतिक्रिया देता है, और इसके लिए उपलब्ध आईडी, ईमेल, उपयोगकर्ता नाम इत्यादि जैसे उपयोगकर्ता के बारे में जानकारी देता है।
  5. सर्वर में अब उपयोगकर्ता की जानकारी है और उपयोगकर्ता को अपने उपयोगकर्ता डेटाबेस में अद्वितीय आईडी, ईमेल पता या पहचान के किसी अन्य टुकड़े के माध्यम से ढूंढ सकता है। इस बिंदु पर उपयोगकर्ता को एप्लिकेशन के लिए ज्ञात नहीं होने पर एक नया खाता बनाया जा सकता है।
  6. अब उपयोगकर्ता ज्ञात है, सर्वर एक कुकी लिख सकता है जो रिकॉर्ड करता है कि वह कौन है, लेकिन ध्यान दें कि यह चरण 5 में से एक की तुलना में एक अलग पहचान है। ओपनआईडी प्रदाता द्वारा लौटाई गई पहचान जानकारी उपयोगी थी उपयोगकर्ता को अपने डेटाबेस में ढूंढें, इसलिए अब आप अपने आवेदन के संदर्भ में उपयोगकर्ता की पहचान रिकॉर्ड कर सकते हैं। यह एक डेटाबेस उपयोगकर्ता आईडी, ईमेल पता या उपयोगकर्ता नाम (यदि वे अद्वितीय हैं), या एक टोकन हो सकता है, जो उपयोगकर्ता के बारे में आपके पास मौजूद कुछ जानकारी का हैश हो सकता है।
  7. कुकी के साथ सर्वर पर भेजे गए प्रत्येक नए अनुरोध को डेटा के साथ आता है जो प्रमाणीकृत उपयोगकर्ता की पहचान करता है।

तो देखते हैं कि जब आप मिश्रण में कोणीयजेएस जोड़ते हैं तो क्या होता है। ध्यान दें कि ऐसा करने के कई तरीके हैं, जो मैंने नीचे वर्णित किया है वह एक संभावना है।

यदि कोणीय ऐप सर्वर से अनुरोध जारी करता है जिसके लिए प्रमाणीकरण की आवश्यकता होती है तो सर्वर को एक त्रुटि कोड 401 वापस करना चाहिए। उदाहरण के लिए, कोणीय ऐप एक लॉगिन फॉर्म पॉप अप कर सकता है, उदाहरण के लिए।

लेकिन ओपनआईडी प्रमाणीकरण नृत्य एक समृद्ध जेएस एप्लिकेशन के संदर्भ में नहीं किया जा सकता है क्योंकि इसे ब्राउज़र रीडायरेक्ट की आवश्यकता होती है।

  • एक रूट URL है, जो कोणीय एप्लिकेशन
  • एक यूआरएल जो OpenID प्रमाणीकरण शुरू की
  • एक यूआरएल OpenID प्रदाता के लिए कॉलबैक के रूप में भेजा जाता है कि कार्य करता है: अपने सर्वर साइड आवेदन कम से कम तीन मार्गों का समर्थन करना होगा

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

जब उपयोगकर्ता लॉगिन बटन पर क्लिक करता है तो सर्वर जागता है और ओपनआईडी प्रमाणीकरण शुरू करने का अनुरोध प्राप्त करता है। इस बिंदु पर बदलाव के बिना ऊपर 1-5 कदम।

चरण 5 के अंत में सर्वर ने एप्लिकेशन के डेटाबेस में उपयोगकर्ता को स्थित किया है। कोणीय ऐप को पुनरारंभ करने के लिए सर्वर अब रूट URL पर रीडायरेक्ट के साथ प्रतिक्रिया दे सकता है। यदि ऐप को उस स्थिति में पुनरारंभ करने की आवश्यकता है जो प्रारंभिक स्थिति नहीं है तो ओपनआईडी प्रमाणीकरण प्रक्रिया शुरू करने से पहले स्थिति को पुनर्स्थापित करने के लिए क्लाइंट साइड स्टोरेज (उदाहरण के लिए एक कुकी) में सहेजा जा सकता है।

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

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

यदि अनुरोध के साथ भेजी गई पहचान सत्यापित की गई है तो अनुरोध किया जा सकता है और प्रतिक्रिया को कोणीय ऐप पर वापस भेजा जा सकता है।

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

बहुत महत्वपूर्ण: कोणीय ऐप और फ्लास्क सर्वर के बीच सभी एक्सचेंज जिनमें उपयोगकर्ता जानकारी शामिल है, सुरक्षित HTTP पर किया जाना चाहिए। यदि आपकी आईडी या टोकन सादा पाठ में यात्रा नहीं करेंगे।

+0

क्या यह उत्तर AngularJS के पास रूट हैंडलिंग से पहले बनाया गया था जो रिटर्न रीडायरेक्ट यूआरआई में लौटा टोकन पढ़ सकता था या क्या मुझे कुछ याद आ रहा है? – BenCr

+0

@BenCr: मुझे यकीन नहीं है कि AngularJS को रीडायरेक्ट पर हाथ मिल सकता है। मुझे लगता है कि ब्राउज़र जावास्क्रिप्ट तक पहुंचने से पहले इसे संभालता है, वास्तव में यह कभी नहीं मिलेगा। – mvermand

+0

यदि आप https://authsite.com से https://my.angularsite.com/#/login कोणीय में जाते हैं तो एक मार्ग बदल जाएगा/राज्य बदल गया घटना आग लग जाएगी। इसे रीडायरेक्ट को संभालने की आवश्यकता नहीं है। फिर आप रूट चेंज इवेंट में टुकड़े तक पहुंच सकते हैं और टोकन खींच सकते हैं। – BenCr

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