2012-09-03 16 views
13

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

मैंने पहले से ही DotNetOpenAuth NuGet पैकेज डाउनलोड किया है, लेकिन अब तक सभी उदाहरण एक एपीआई के बजाय क्लाइंट ऐप के लिए हैं।

मेरी समस्या सरल है। मैं ग्राहकों को अपने एपीआई को प्रमाणीकरण अनुरोध भेजना चाहता हूं। एपीआई एक ओपनआईडी प्रदाता के साथ प्रमाणित करता है। एपीआई फिर वेब एपीआई कॉल में [अधिकृत] टैग का उपयोग करने के लिए जो कुछ भी करने की आवश्यकता है उसे सेट करता है।

मैं समझता हूं कि .NET अनुप्रयोगों में, Forms प्रमाणीकरण.SetCookie को बुलाया जा सकता है, लेकिन क्या यह अन्य भाषाओं के लिए एक आसान-कार्यान्वयन समाधान भी है?

संक्षेप में प्रश्न। मैं ओपनआईडी को एक एमवीसी 4 वेब एपीआई में कैसे एकीकृत करूं जो प्राधिकृत टैग के उपयोग की अनुमति देता है जिसे कई भाषाओं द्वारा बुलाया जा सकता है और उपभोग किया जा सकता है?

+1

लोगों के लिए इस पर वापस आने के लिए, DotNetOpenAuth के लिए NuGet पैकेज पूरी तरह से अद्यतित नहीं है (आज के रूप में)। इसमें OAUTH2 नामस्थान शामिल नहीं है। इसके बजाय इस [स्रोतफोर्ज लिंक] का उपयोग करें (http://sourceforge.net/projects/dnoa/)। – Quickhorn

+0

इस प्रोजेक्ट पर एक नज़र डालें http://weblogs.asp.net/haithamkhedre/archive/2011/03/13/openid-authentication-with-asp-net-mvc3-dotnetopenauth-and-openid-selector.aspx –

उत्तर

23

आप प्रमाणीकरण और प्रमाणीकरण की भूमिका को भ्रमित कर सकते हैं। ऐसा लगता है कि आपकी वेब एपीआई दोनों की आवश्यकता है।

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

संभवतः प्राधिकरण प्रक्रिया के हिस्से के रूप में, उपयोगकर्ता आपकी सेवा में लॉग इन करता है। उपयोगकर्ता में लॉगिंग का यह चरण प्रमाणीकरण है। और यह प्राधिकरण के लिए ऑर्थोगोनल है। चाहे आप ओपनआईडी, उपयोगकर्ता नाम/पासवर्ड, एक्स.50 9 प्रमाण इत्यादि के माध्यम से उपयोगकर्ता को प्रमाणित करते हैं, आपके वेबएपीआई कॉल को अधिकृत करने के तरीके के लिए अप्रासंगिक होना चाहिए। दूसरे शब्दों में, आपके वेबएपीआई तरीकों पर ध्यान नहीं दिया जाना चाहिए कि उपयोगकर्ता ने प्रमाणीकृत कैसे किया (पढ़ा: कोई ओपनआईडी जो भी संबंध नहीं है)। उनके पास उनके पास एक प्राधिकरण फ़िल्टर होगा जो आने वाले अनुरोध पर प्राधिकरण को सत्यापित करता है और इसे जानकारी के कुछ हिस्सों में अनुवाद करता है जिसमें खाते का उपयोगकर्ता नाम शामिल है, पहुंच का स्तर, पहुंच का स्तर, अधिकृत की आईडी क्लाइंट, आदि

तो एक समय में एक कदम है, पूरे परिदृश्य कुछ इस तरह जाना हो सकता है:

  1. एक 3 पार्टी क्लाइंट ऐप ऑपरेटिंग एक उपयोगकर्ता (के सादगी के लिए मान लेते हैं कि इस ग्राहक एप्लिकेशन एक 3 है चलो पार्टी वेब एप्लिकेशन) कार्यक्षमता का उपयोग करना चाहता है जिसके लिए ग्राहक को उपयोगकर्ता के नाम पर आपके वेबएपीआई तक पहुंच की आवश्यकता होती है।
  2. क्लाइंट को उपयोगकर्ता के सीमित प्रतिरूपण के लिए प्राधिकरण प्राप्त करने की आवश्यकता है क्योंकि ग्राहक आपके वेबएपीआई को कॉल करता है। वे आपकी सेवा में प्रमाणीकरण एंडपॉइंट पर ओएथ 2 रीडायरेक्ट से शुरू होते हैं। यदि यह DotNetOpenAuth का उपयोग करके कार्यान्वित किया गया है तो यह WebServerClient कक्षा का उपयोग कर सकता है।
  3. आपका प्राधिकरण समापन बिंदु OAuth 2 प्रमाणीकरण सर्वर की भूमिका को भरता है, और इस तरह, DotNetOpenAuth की AuthorizationServer कक्षा का उपयोग करता है। पहली बात यह है कि यह देखने के लिए जांच करें कि अनुरोध में शामिल एएसपी.NET फॉर्म प्रमाणीकरण कुकी है या नहीं। यह कुकी एक प्राकृतिक संकेत है कि उपयोगकर्ता ने पहले से ही अपने ब्राउज़र पर अपनी सेवा में लॉग इन किया है, और यदि ऐसा है, तो वह उपयोगकर्ता कौन है। इस कुकी के लिए जांच Controller.User पर एक साधारण कॉल है। ध्यान दें कि आपका प्राधिकरण एंडपॉइंट वेबएपीआई की बजाय एमवीसी है क्योंकि इसकी प्रतिक्रिया ब्राउज़र/उपयोगकर्ता के लिए है, क्लाइंट ऐप नहीं। आइए मान लें कि ऐसी कोई कुकी नहीं है और Controller.User शून्य है (या User.Identity.IsAuthenticatedfalse है)।इस एंडपॉइंट को कार्यान्वित करने के लिए OAuthAuthorizationServer नमूना का संदर्भ लें।
  4. आपका प्राधिकरण एंडपॉइंट उपयोगकर्ता लॉगिन पृष्ठ पर रीडायरेक्ट के साथ प्रतिक्रिया करता है, जिसमें क्वेरी स्ट्रिंग में redirectUrl पैरामीटर शामिल है जो पूर्ण आने वाले OAuth 2 प्रमाणीकरण अनुरोध URL को बनाए रखता है।
  5. आपका उपयोगकर्ता लॉगिन पेज एक एमवीसी एंडपॉइंट है जो ओपनआईडी रिलीइंग पार्टी के रूप में कार्य करता है। यह एंडपॉइंट DotNetOpenAuth की OpenIdRelyingParty कक्षा का उपयोग करता है। ध्यान दें कि इस एंडपॉइंट को ओथ 2 या प्राधिकरण सामग्री के बारे में कुछ नहीं पता है। यह केवल उपयोगकर्ता को प्रमाणित करता है। उपयोगकर्ता को प्रमाणित करने के बाद, यह redirectUrl तर्क में URL पर वापस रीडायरेक्ट करता है। इसे कैसे करें के लिए OpenIdRelyingPartyMvc नमूना देखें।
  6. प्रमाणीकरण एंडपॉइंट अपने पहले चरण को दोहराता है, इस समय एक फॉर्म प्रमाणीकरण कुकी है, इसलिए यह उपयोगकर्ता को एक पृष्ठ प्रदर्शित करने के लिए आगे बढ़ता है कि क्या वह क्लाइंट को उपयोगकर्ता के डेटा तक पहुंचने के लिए प्राधिकृत करना चाहता है। उपयोगकर्ता हां क्लिक करता है। (सावधान रहें: इस उपयोगकर्ता प्रमाणीकरण पृष्ठ पर XSRF लागू करें और mitigations पर क्लिक करें)।
  7. प्राधिकरण समापन बिंदु उपयोगकर्ता की सकारात्मक प्रतिक्रिया को संसाधित करता है और प्राधिकरण रिकॉर्ड बनाने और ग्राहक को प्रतिक्रिया वापस करने के लिए AuthorizationServer पर कॉल करता है। इस कॉल के परिणामों में से एक क्लाइंट को रीडायरेक्ट प्रतिक्रिया का निर्माण है जो इसे एक प्राधिकरण कोड देता है।
  8. ब्राउज़र अब क्लाइंट ऐप के यूआरएल पर खींच रहा है जो इसे प्राधिकरण कोड पास करता है। ग्राहक तब पहुंचने के लिए प्राधिकरण कोड का आदान-प्रदान करने के लिए WebServerClient कक्षा का उपयोग करता है (और आमतौर पर टोकन को रीफ्रेश भी करता है)।
  9. क्लाइंट ऐप अब आपके वेबएपीआई यूआरएल को सीधे कॉल करता है, जिसमें HTTP प्राधिकरण शीर्षलेख में OAuth 2 के माध्यम से प्राप्त पहुंच टोकन भी शामिल है।
  10. आपका वेबएपीआई OAuth2 संसाधन सर्वर की भूमिका को भरता है, और आने वाले ओएथ 2 एक्सेस टोकन को सत्यापित करने के लिए आपके वेबएपीआई विधियों पर लागू फ़िल्टर विशेषता प्राधिकरण को अपना काम करने के लिए DotNetOpenAuth ResourceServer कक्षा का उपयोग करता है। आप इसे कैसे करें के लिए OAuthResourceServer नमूना, या इससे भी बेहतर, David Christiansen's WebAPI sample का संदर्भ ले सकते हैं।

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

बीटीडब्ल्यू, डॉटनेट ओपेनएथ नमूने जिन्हें मैं संदर्भित करता हूं, NuGet के माध्यम से वितरित नहीं किया जाता है। आप get the samples from SourceForge

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