2015-03-05 9 views
10

मेरे पास एमवीसी और वेब एपीआई नियंत्रकों और एस्पनेट पहचान दोनों का उपयोग करने वाली साइट है। मैंने वीएस2013 एसपीए टेम्पलेट का इस्तेमाल एमवीसी और वेब एपीआई नियंत्रकों दोनों के साथ शुरुआती बिंदु के रूप में किया था।हाइब्रिड एमवीसी/वेब एपीआई नियंत्रक साइट में AspNet पहचान

यहाँ मेरी परिदृश्य है:

MVC नियंत्रक का उपयोग में उपयोगकर्ता लॉग और एक प्रमाणन कुकी वापस हो जाता है।

अगला पृष्ठ प्रमाणीकृत एमवीसी नियंत्रक का उपयोग कर परोसा जाता है। वह पृष्ठ नॉकआउट का उपयोग करता है और एक वेब एपीआई नियंत्रक को AJAX पोस्ट कॉल करता है जिसे बटन क्लिक (सेव) से प्रमाणित किया जाता है। वेब एपीआई नियंत्रक को बेयरर - टोकन-- के साथ प्रमाणीकरण शीर्षलेख की आवश्यकता होती है।

मेरा प्रश्न यह है कि दूसरों को इस "दो" प्रमाणीकरण दृष्टिकोण कैसे संभालते हैं। मैंने एमवीसी नियंत्रक पर एक एंडपॉइंट बनाया जो प्रमाणीकृत है और वर्तमान प्रिंसिपल के आधार पर एक भालू टोकन देता है। मैं सफलतापूर्वक वेब एपीआई एंडपॉइंट पर पोस्ट करने के लिए उस टोकन का उपयोग कर सकता हूं।

जावास्क्रिप्ट तर्क जो मैं बना रहा हूं वह थोड़ा सा है ... भ्रमित। यह देखने के लिए जांच करता है कि सत्र टोकन में एक्सेस टोकन है या नहीं, अगर ऐसा है तो AJAX कॉल करें। यदि नहीं, तो टोकन एंडपॉइंट प्राप्त करें और फिर वेब एपी एंडपॉइंट को कॉल करें (अजाक्स वादे को पूरा करने के लिए कॉलबैक का एक गुच्छा का उपयोग करके, असफल, ect)।

दूसरों ने उस परिदृश्य को कैसे संभाला है जहां आपको ऑथ कुकी और बेयरर टोकन दोनों की आवश्यकता है ताकि प्रत्येक "एमवीसी" पृष्ठ प्रमाणीकृत हो और वेब एपी एंडपॉइंट कि पेज कॉल प्रमाणीकृत हो। यदि कुकी समाप्त होने से पहले भालू टोकन समाप्त हो जाता है तो आप क्या करते हैं।

मुझे बताएं कि क्या मैं स्पष्ट नहीं हूं या आपको अधिक जानकारी चाहिए।

संपादित

मैं, Using bearer tokens and cookie authentication together इस में आए यह अभी भी मेरे सवाल का जवाब नहीं है के रूप में मैं यह पहले से ही सेटअप है तो MVC कुकी प्रमाणन और वेब एपीआई स्वीकार करता है केवल वाहक टोकन स्वीकार करता है। मुझे लगता है कि यह एक समस्या होनी चाहिए जो पहले ही हल हो चुकी है, लेकिन शायद मैं गलत दृष्टिकोण ले रहा हूं।

+0

आपने इस के आसपास कैसे प्राप्त किया? मैंने पिछले प्रोजेक्ट के लिए जो वर्णन किया है, वही किया है, लेकिन मैं अभी एक नया शुरू कर रहा हूं और मुझे यह जानने में दिलचस्पी थी कि इस के आसपास कोई "सर्वोत्तम प्रथाएं" हैं या नहीं, मैं इस समय –

+1

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

उत्तर

0

मैं कुकीज़ का उपयोग करके और टोकन रीफ्रेश करके इस समस्या को हल करने में कामयाब रहा हूं।

यह कि यह कैसे हुआ है,

  1. एन्क्रिप्ट और कुकी में पहुँच टोकन & ताज़ा टोकन सहेजें।
  2. वेब एपीआई पर कॉल करने से पहले टोकन समाप्ति तिथि मान्य करें।
  3. यदि टोकन की समयसीमा समाप्त हो गई है, तो रीफ्रेश टोकन/स्पष्ट उपयोगकर्ता ऑथ कुकी का उपयोग करके नया टोकन प्राप्त करें और उसे लॉग आउट करें।

मैंने इसे VS2013 SPA टेम्पलेट में नहीं देखा है। लेकिन जैसा कि मैंने इसे देखा है, आप टोकन को सत्यापित करने के लिए चरण दो का उपयोग कर सकते हैं और यदि यह समाप्त हो गया है, तो एक नया एक्सेस टोकन प्राप्त करने के लिए एमवीसी नियंत्रक अंत बिंदु पर कॉल करें।

2

मुझे लगता है कि आप मूल रूप से OAuth2.0 के साथ मुख्य समस्या में ठोकर खाई हैं। OAuth2.0 केवल प्रमाणीकरण प्रोटोकॉल है। आपको जो चाहिए वह एक सुरक्षा मॉडल है जो प्रमाणीकरण और प्रमाणीकरण दोनों का समर्थन करता है।

परिचय OpenId Connect

OpenId Connect एक प्रमाणीकरण परत OAuth2.0 प्राधिकरण परत के लिए पर बनाया गया है। यह पृष्ठभूमि सर्वर/सेवा पर किए गए प्रमाणीकरण के आधार पर अंतिम उपयोगकर्ता को सत्यापित करने का एक आसान तरीका प्रदान करता है। इसके अतिरिक्त यह JSON का उपयोग कर प्राधिकरण के लिए उपयोगकर्ता के बारे में एक मूलभूत HTTP API में मूलभूत प्रोफ़ाइल को पास करने में सक्षम है।

"OpenId Connect वेब आधारित, मोबाइल, और जावास्क्रिप्ट ग्राहकों सहित ग्राहकों की एक सीमा, अनुरोध और प्रमाणीकृत सत्र और अंत उपयोगकर्ताओं के बारे में जानकारी प्राप्त करने के लिए वैकल्पिक सुविधाओं का समर्थन करता है। विनिर्देश सूट एक्स्टेंसिबल है, जैसे पहचान डेटा, ओपनआईडी प्रदाता की खोज, और सत्र प्रबंधन की एन्क्रिप्शन। " - Wikipedia

नेट के लिए वहाँ पहचान सर्वर घटकIdentityServer3 कहा जाता है के लिए एक Nuget पैकेज है। पहचान Server3 के साथ चल रहे एक साधारण एमवीसी/वेब-एपीआई को कैसे प्राप्त करें, इस पर getting started tutorial पर एक सुंदर गहराई है।

वेब Apps बनाम वेब APIs और कुकीज़ बनाम टोकन

  • आमतौर पर वेब Apps पारंपरिक सर्वर साइड अनुप्रयोगों का उपयोग करने वाले कुकी-आधारित प्रमाणीकरण कर रहे हैं।

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

आप अधिक संदर्भ के लिए इन लेखों को पढ़ने के लिए चाहते हो सकता है: Cookies vs Tokens. Getting auth right with Angular.JS और 10 Things You Should Know about Tokens

  • कुकी-आधारित प्रमाणीकरण अलग ढंग से प्रत्येक वेब मंच द्वारा कार्यान्वित किया जाता है, लेकिन दिन के अंत में, वे सब कुछ कुकी (सर्वर पर एक सत्र के लिए संयुक्त रूप से) जो "प्रमाणीकृत उपयोगकर्ता" का प्रतिनिधित्व करता है की स्थापना खत्म । प्रत्येक अनुरोध पर, उस कुकी को भेजा जाता है और सत्र कुछ स्टोर से deserialized है (स्मृति में अगर यह एक सर्वर है या कुछ लगातार भंडारण अगर यह एक सर्वर फार्म है)।

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

  • दोनों दृष्टिकोणों के लिए आप उपयोगकर्ता से समान मात्रा में जानकारी प्राप्त कर सकते हैं। यह लॉगिन अनुरोध में भेजे गए दायरे पैरामीटर द्वारा नियंत्रित है।

  • आप कुकी-आधारित प्रमाणीकरण के साथ टोकन-आधारित प्रमाणीकरण मिश्रण कर सकते हैं।ध्यान रखें कि कुकीज़ ठीक काम करेगी यदि वेब ऐप और एपीआई एक ही डोमेन से परोसे जाते हैं, तो आपको टोकन आधारित प्रमाणीकरण की आवश्यकता नहीं हो सकती है। यदि आप जावास्क्रिप्ट से अपने एपीआई को कॉल करना चाहते हैं (मौजूदा कुकी का उपयोग करने के बजाय) तो किसी भी तरह आपको id_token को अपने वेबपृष्ठ में सेट करना होगा। ऐसा करने का एक तरीका यह है कि इसे अपने लेआउट/मास्टर पेज पर सेट करें जैसे window.token = <% = id_token%>; और फिर आप इसे अपने जावास्क्रिप्ट कोड में कहीं से भी प्राप्त करते हैं।

पी.एस इस विषय "एकीकृत प्रमाणीकरण & सौंपे गए मोबाइल, वेब और OpenID Connect और OAuth2 डोमिनिक बेयर के द्वारा के साथ डेस्कटॉप के लिए एपीआई पहुँच" कहा जाता है पर एक बड़ा video है। जो OAuth2.0 की सीमाओं पर बहुत अधिक प्रकाश डालने में मदद करेगा और ओपनआईडी कनेक्ट उन्हें हल करने का प्रयास कैसे करेगा।

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