2013-06-24 6 views
5

मैं लेख के बहुत सारे मिल गया और इतना WCF शोकहारा सेवाओं के लिए दावा आधारित प्रमाणीकरण के आधार पर सवाल है, लेकिन मैं MVC वेब एपीआई का उपयोग कर रहा RESTful सेवा (नहीं WCF बाकी सेवा) विकसित करने के लिए ...वेब एपीआई के साथ wif का उपयोग कर

तो क्या आप कृपया मुझे समझने में मदद कर सकते हैं कि दावे आधारित प्रमाणीकरण का उपयोग करके रीस्टफुल सेवा को कैसे सुरक्षित किया जाए?

यहाँ मैं क्या जरूरत है:

  1. मैं एक वेब एप्लिकेशन और MVC4 वेब एपीआई सेवा है
  2. हम एसटीएस
  3. MVC वेब एप्लिकेशन एसटीएस भरोसा करता है
  4. अब उपयोगकर्ता के लॉग वेब ऐप में, उसे एसटीएस लॉगिन पेज पर रीडायरेक्ट किया जाता है।
  5. एक बार लॉग इन होने पर, उसे वापस एमवीसी वेब साइट पर रीडायरेक्ट किया जाता है।
  6. यह वेब ऐप वेब-एपीआई सेवा को आमंत्रित करता है।

अब, मैं बिंदु # 4 पर अटक गया हूं। हमारे पास एक विश्वसनीय सेवा है, लेकिन डब्ल्यूआईएफ को लागू करने की आवश्यकता है।

क्या कोई भी कृपया इसके साथ मेरी सहायता कर सकता है।

नोट: मैं WCF Restservice उपयोग नहीं कर रहा है, लेकिन का उपयोग कर MVC वेब एपीआई

उत्तर

11

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

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

नेट 4.5 में यह चालू करने के लिए आप सही पर WIF तत्व पर saveBootstrapContext विशेषता निर्धारित:

<system.identityModel> 
    <identityConfiguration saveBootstrapContext="true"> 
    ... 

नेट 4 के लिए, config इस lke दिखता है:

<microsoft.identityModel> 
    <service saveBootstrapTokens="true"> 
    ... 

फिर वेब एप्लिकेशन से इसे एक्सेस करने के लिए आप ऐसा कुछ करते हैं (इस पर निर्भर करता है कि आपके पास कितनी पहचान है) यह वेब एपीआई को कॉल करने वाले नियंत्रक में है। .NET 4.5:

SecurityToken token = (User as ClaimsPrincipal).Identities[0].BootstrapContext; 

के लिए।नेट 4:

SecurityToken token = (User as ClaimsPrincipal).Identities[0].BootstrapToken; 

मूल सुरक्षा टोकन कर सकते हैं प्राप्त करने के बाद, आप अब एक अधिकृत हेडर के रूप में वेब एपीआई के लिए कॉल करने के लिए संलग्न कर दें। आम तौर पर इसे बेयरर टोकन के रूप में जोड़ा जाएगा, जो कि यह कहने का एक शानदार तरीका है कि आप हेडर वैल्यू की शुरुआत में "भालू" शब्द जोड़ते हैं। टोकन संलग्न करने के लिए, कुछ इस तरह करते हैं:

WebClient request = new WebClient(); 
request.Headers.Add("Authorization","bearer " + tokenAsString); 

नोट: आम तौर पर आप को एन्क्रिप्ट करेगा या बेस 64 पारगमन में टोकन मान सांकेतिक शब्दों में बदलना करने के बजाय कच्चे स्ट्रिंग देते हैं, खासकर अगर यह XML है, क्योंकि कुछ व्यवस्थाएं होगा एक्सएमएल को पारगमन में उलझाएं।

टोकन को एक स्ट्रिंग में कनवर्ट करने के लिए, आपको उपयोगकर्ता को SecurityTokenHandler से प्राप्त कक्षा होना चाहिए, इनमें से कुछ मानक मानक कार्यकर्ताओं में कुछ मानक टोकन प्रकारों को संभालने के लिए शामिल हैं। बाकी सेवाओं के लिए, JSON वेब टोकन एक लोकप्रिय प्रारूप है और इसमें यहां

https://www.nuget.org/packages/System.IdentityModel.Tokens.Jwt/

के लिए कोई हैंडलर युक्त आप कुछ अन्य टोकन प्रकार का उपयोग कर रहे हैं, तो एक NuGet पैकेज है, आप अपने खुद हैंडलर लिख सकते हैं (यह वास्तव में मुश्किल नहीं है) या वेब पर खोजने की कोशिश करें।

नेट 4.5 में SecurityTokenHandler कक्षा में WriteToken(SecurityToken) विधि है जो टोकन को स्ट्रिंग के रूप में लौटाती है। WIF के पुराने संस्करणों में केवल WriteToken का XML संस्करण समर्थित था।

कई नमूने दिखा रहे हैं कि सर्वर पक्ष पर आरईएसटी सेवाओं के लिए सुरक्षा टोकन हैंडलर का उपयोग कैसे करें। एक अच्छा उदाहरण यहाँ

http://code.msdn.microsoft.com/AAL-Native-App-to-REST-de57f2cc/view/Discussions#content

सभी प्रासंगिक कोड global.asax.cs फ़ाइल में निहित है है।

+0

का उपयोग कर सकते हैं इसे कैसे संलग्न करें और वेब एपीआई कॉल करें ..... क्या आप एक उदाहरण .... या नमूना कोड प्रदान कर सकते हैं? –

+1

क्या आप कृपया जावास्क्रिप्ट का उपयोग करके इसे कॉल करने का एक उदाहरण भी प्रदान कर सकते हैं (हम इस मामले में टोकन कैसे संलग्न कर सकते हैं), आपके उत्तर से यह स्पष्ट नहीं है कि सेवा पक्ष में कॉन्फ़िगर/कोड क्या होना चाहिए .....? –

+0

सेवा समाप्त होने पर भी ईमेल आईडी, उपयोगकर्ता आईडी इत्यादि जैसे दावे के तत्वों को देखने के लिए .... जो आमतौर पर दावों को उत्पन्न करते समय एसटीएस द्वारा जोड़ा जा रहा है ..... –

1

अपने ग्राहक प्रमाणीकृत नहीं है, तो अपने वेब एपीआई सेवा एक 401 अनधिकृत प्रतिसाद लौटना चाहिए।

यह तब आपके ग्राहकों को प्रमाणीकरण की तलाश करने और एक नया टोकन प्राप्त करने के लिए उत्तरदायी होगा। आप WWW प्रमाणित हैडर

इस वीडियो में मदद कर सकता है के रूप में अपनी लॉग के लिए लिंक लौटना चाहिए - को सुरक्षित ASP.NET वेब एपीआई http://vimeo.com/43603474

+0

मैं आपके द्वारा प्रदान किए गए लिंक से पहले से ही चला गया था .... लेकिन मैं किसी भी अन्य ढांचे का उपयोग नहीं कर सकता .... क्योंकि हमारे पास एसटीएस, बाकी सेवा और वेब ऐप है .... हमें बस खेलने की जरूरत है यह करने के लिए ये .... माइक्रोसॉफ्ट पहचान मॉडल –

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