2012-09-20 12 views
6

वर्तमान में, मेरे पास एक एमवीसी वेब एप्लिकेशन है जो विजेट बेचता है। उपयोगकर्ता फॉर्म प्रमाणीकरण का उपयोग करके हमारे सिस्टम में लॉग इन करता है, और फिर उस समूह के आधार पर विभिन्न कार्यों को कर सकता है (यानी ऑर्डर दें, ऑर्डर देखें, ऑर्डर रद्द करें, इत्यादि)।.NET WebApi प्रमाणीकरण

हमें एक एपी लिखने के लिए काम सौंपा गया है जो तीसरे पक्ष को हमारे सिस्टम में ऑर्डर बनाने और देखने की क्षमता प्रदान करेगा। प्रत्येक तीसरे पक्ष के पास इसका अपना उपयोगकर्ता नाम होगा और वह उस समूह के आधार पर कुछ एपीआई विधियों तक ही सीमित होगा।

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

आईआईएस सेटअप वेबसाइट दो वेब अनुप्रयोगों

  • WidgetStore \ यूआई -uses रूपों प्रमाणीकरण
  • WidgetStore \ एपीआई के साथ WidgetStore नामित - का उपयोग करता है बुनियादी प्रमाणीकरण
+0

अपने फॉर्म/मूल लेख समस्या को हल करने के लिए, मैं सुझाव दूंगा कि आप डोमिनिक बायर से इस महान लेख को पढ़ लें: [फॉर्म/बेसिक ऑथ दावा परिवर्तन] (http://leastprivilege.com/2012/10/24/ एक्सटेंशन-टू-द-वेब-एपीआईएमवीसी-फॉर्मबासिक-ऑथ-नमूना-दावा-परिवर्तन-और-AJAX /) – Swell

उत्तर

9

वहाँ करने के लिए एक रास्ता है हमारे एमवीसी ऐप से हमारे वेब एपीआई ऐप में फॉर्म ऑथ क्रेडेंशियल्स पास करें?

[Authorize] 
public ActionResult CallWebApi() 
{ 
    var baseAddress = new Uri("https://example.com"); 
    var cookieContainer = new CookieContainer(); 
    using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer }) 
    using (var client = new HttpClient(handler) { BaseAddress = baseAddress }) 
    { 
     var authCookie = Request.Cookies[FormsAuthentication.FormsCookieName].Value; 
     cookieContainer.Add(baseAddress, new Cookie(FormsAuthentication.FormsCookieName, authCookie)); 
     var result = client.GetAsync("/api/values").Result; 
     result.EnsureSuccessStatusCode(); 

     // now you can read the result.Content ... 
    } 
} 

इसका मतलब यह है कि आप भी अपने वेब एपीआई परियोजना के web.config में और कहा कि रूपों प्रमाणीकरण सक्षम है कि:

ज़रूर, की वेब एपीआई बुला निम्नलिखित MVC नियंत्रक कार्रवाई उदाहरण के लिए ले जाने कुकी नाम आपके एमवीसी प्रोजेक्ट में इस्तेमाल किए गए जैसा ही है।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। लेकिन, अगर मैं अपने वेब एपीआई प्रोजेक्ट के web.config में फॉर्म प्रमाणीकरण सक्षम करता हूं, तो तीसरे पक्ष प्रमाणित करने में सक्षम नहीं होंगे। वे WebApi से कनेक्ट करने के लिए बेसिक प्रमाणीकरण का उपयोग करते हैं, और यह अब काम नहीं करेगा। तीसरे पक्षों में फॉर्मऑथ कुकी – user1686249

+0

नहीं होगा लेकिन हैंडलर को प्रदर्शित करने वाले आपके मूल रूप प्रमाणीकरण कैसा दिखते हैं? यदि ऐसा लगता है तो आपको फॉर्म प्रमाणीकरण सक्षम करने में समस्या नहीं होगी: http://stackoverflow.com/a/11536349/29407 –