2014-05-24 4 views
7

मैं वेबएपीआई के साथ एक एपीआई बना रहा हूं जो वेब ब्राउजर क्लाइंट से एचटीटीपीएस के माध्यम से एसएसएल पर प्रमाणीकरण जानकारी स्वीकार करेगा। वेब ब्राउजर फॉर्म प्रमाणीकरण का उपयोग करता है और एचटीटीपीएस की आवश्यकता होती है ताकि यह सुरक्षित रूप से एपीआई एंडपॉइंट पर उपयोगकर्ता नाम/पासवर्ड भेज सके। मेरा एपीआई वेब क्लाइंट के लिए प्रमाणीकरण को संभालने के लिए Websecurity.Login() और Websecurity.Logout() का उपयोग करता है।विंडोज फोन 8 विकास और वेबएपीआई - फॉर्म ऑथ के माध्यम से प्रमाणीकरण?

यह WinJS के साथ बनाए गए WP8 एप्लिकेशन/यूनिवर्सल ऐप में कैसे संभाला जाएगा? क्या मैं वही कर सकता हूं - एचटीटीपीएस पर लॉगिन/पंजीकरण प्रमाण पत्र भेजें और फॉर्म ऑथ को संभालने के लिए वेबसेक्रिटी का उपयोग करें?

यहां बताया गया है मेरी वेबएपीआई वर्तमान में प्रमाणन के लिए स्थापित किया गया है:

public HttpResponseMessage LogIn(LoginModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     if (User.Identity.IsAuthenticated) 
     { 
      return Request.CreateResponse(HttpStatusCode.Conflict, "already logged in."); 
     } 

     if (WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe)) 
     { 
      FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); 
      return Request.CreateResponse(HttpStatusCode.OK, "logged in successfully"); 
     } 
     else 
     { 
      return new HttpResponseMessage(HttpStatusCode.Unauthorized); 
     } 
    } 

    // If we got this far, something failed 
    return new HttpResponseMessage(HttpStatusCode.InternalServerError); 
} 

public HttpResponseMessage LogOut() 
{ 
    if (User.Identity.IsAuthenticated) 
    { 
     WebSecurity.Logout(); 
     return Request.CreateResponse(HttpStatusCode.OK, "logged out successfully."); 
    } 

    return Request.CreateResponse(HttpStatusCode.Conflict, "already done."); 
} 

इस दृष्टिकोण WP8 या अन्य मूल के मोबाइल एप्लिकेशन विकास प्रमाणीकरण के साथ संगत है?

+0

"यह कैसे एक WP8 आवेदन/यूनिवर्सल WinJS के साथ बनाया गया अनुप्रयोग में संभाला जायेगा मैं एक ही बात कर सकते हैं के साथ एक्सएचआर गुजर में कुछ विवरण है एचटीटीपीएस पर पंजीकरण प्रमाण पत्र और फॉर्म ऑथ को संभालने के लिए वेबसेक्योरिटी का उपयोग करें? " मुझे लगता है कि आप ठीक होंगे, अगर आप फॉर्म ऑथ का उपयोग करते हैं, तो आपको अनुरोध पोस्ट को जोड़ना होगा और सर्वर से लौटाई गई कुकी को भी संभालना होगा। –

उत्तर

2

यह निश्चित रूप से काम करेगा, यह मानते हुए कि लगातार अनुरोध कुकी को लेते हैं जो Login कार्रवाई के पहले अनुरोध में संलग्न है।

AJAX का उपयोग करने वाले ब्राउज़र ऐप के मामले में यह बॉक्स से बाहर काम करता है क्योंकि लगातार AJAX अनुरोध उसी डोमेन द्वारा जारी की गई सभी कुकीज़ लेते हैं और वर्तमान ब्राउज़र सत्र में संलग्न होते हैं।

मूल एप्लिकेशन के मामले में यह ट्रिकर हो सकता है क्योंकि इसका मतलब है कि एक ही क्लाइंट प्रॉक्सी इंस्टेंस का उपयोग करना होगा या आपको प्रमाणीकरण कुकीज़ के लिए अस्थायी स्थानीय संग्रहण करने का तरीका मिल जाएगा और इन कुकीज़ को प्रत्येक अनुरोध में संलग्न करें।

हालांकि, इस अनुरोध की संभावित कमी है: आप मानते हैं कि लॉगिन विधि फॉर्म कुकी बनाने के लिए सक्रिय परिदृश्य में लॉगिन/पासवर्ड का उपयोग कर सकती है। और यह हमेशा इतना आसान नहीं है।

ऐसा इसलिए है क्योंकि आपकी साइट संभावित रूप से बाहरी पहचान प्रदाता (एडीएफएस, एज़ूर एक्टिव डायरेक्टरी, Google, फेसबुक, जो कुछ भी) के साथ संघीय हो सकती है ताकि वास्तविक प्रमाणीकरण किसी अन्य वेबसाइट पर हो और आपकी वेबसाइट केवल उस प्रतिक्रिया को प्राप्त करे जो अनुरूप हो इस्तेमाल प्रोटोकॉल पर एक ही हस्ताक्षर के लिए (OAuth2, डब्ल्यूएस-फेडरेशन)।

ऐसे मामले में, उपयोगकर्ता की पहचान प्राप्त करने के लिए सर्वर पक्ष में जोड़ी लॉगिन/पासवर्ड का उपयोग करने का कोई आसान तरीका नहीं है।

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

मुश्किल लगता है, लेकिन हमें कुछ फेडरेशन परिदृश्य मिल गए हैं जहां पार्टियों के बीच वास्तविक एसएसओ प्रोटोकॉल की गारंटी नहीं थी और होस्ट किए गए वेब ब्राउज़र के भीतर निष्क्रिय परिदृश्य का ऐसा सिमुलेशन एकमात्र विश्वसनीय तरीका था।

+0

यदि मूल आवेदन केवल एक फॉर्म (कोई तृतीय-पक्ष ऑथ नहीं) के माध्यम से मानक उपयोगकर्ता नाम/पासवर्ड स्वीकार करेगा, तो क्या हमें आपके द्वारा उल्लिखित दोष के बारे में चिंता करने की ज़रूरत है? – SB2055

+0

इसके अलावा - जब WP8 (जैसे फेसबुक) पर एक मूल ऐप प्रमाणीकृत करने के लिए उपयोगकर्ता नाम/पासवर्ड स्वीकार करता है, तो क्या वे संभवतः फॉर्म ऑथ कर रहे हैं, या क्या कोई अन्य तंत्र है जो मूल मोबाइल ऐप्स के लिए अधिक उपयुक्त है? – SB2055

+0

फेसबुक OAuth2 प्रोटोकॉल के उपयोगकर्ता नाम-पासवर्ड प्रवाह का उपयोग करके प्रमाणित करता है। OAuth2 में कई प्रवाह हैं जो विभिन्न परिदृश्यों का समर्थन करते हैं और यू-पी सक्रिय परिदृश्यों के लिए है। अगर फेसबुक को और संघीय किया जाएगा, तो यह काम नहीं करेगा या उनके लिए बहुत से कस्टम काम की आवश्यकता होगी। यदि आप किसी भी संघीय परिदृश्य की योजना नहीं बनाते हैं, तो OAuth2 का यू-पी अभी भी एक अच्छा विकल्प है यदि आप एक कस्टम उपयोगकर्ता नाम/पासवर्ड फॉर्म होस्ट करना चाहते हैं। उदाहरण के लिए प्रवाह पर और पढ़ें https://help.salesforce.com/HTViewHelpDoc?id=remoteaccess_oauth_username_password_flow.htm&language=en_US –

0

मैं जे एस के माध्यम से WebAPI का उपयोग रूपों प्रमाणीकरण करने के लिए, यह है कि कैसे साथ CORS

डेकोरेट नियंत्रक (आप CORS उपयोग करने की आवश्यकता हो तो) (लगता है कि आप इस के लिए एक nuget पैकेज की आवश्यकता हो सकती)।

[EnableCors(origins: "*", headers: "*", methods: "*")] 
क्रेडेंशियल्स सेट कुकी के साथ

एक बार आपके खुश

FormsAuthentication.SetAuthCookie 

इस HTML पृष्ठ के लिए अजाक्स है,

$.ajax({ 
    type: 'Post', 

    url: 'http://' + api + '/?alloworigin=true', 
    data: { Username: "test", Password: "test12" }, 
    dataType: 'json', 
    xhrFields: { 
     withCredentials: true 
    }, 
    success: function(data) { 
     var x = data; 
    }, 
    error: function(msg) { 
     alert(msg.responsetext); 
    } 
}); 

तो किसी भी प्रमाणन, सजाया नियंत्रक पहुँचा जा सकता है, कुकी है फिर प्रत्येक अनुरोध

[Authorize] 
के साथ भेजा गया यदि आपके कोई प्रश्न हैं तो

चिल्लाओ। ? लॉगिन भेज/-

Microsoft_Press_eBook_Programming_Windows_8_Apps_HTML_CSS_JavaScript_2E_PDF.pdf

http://aka.ms/611111pdf WinJS

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