2012-12-13 18 views
5

मैं Node.js और express.js के साथ बनाया गया एक JSON RESTful API निर्माण कर रहा हूँ,दोनों मोबाइल और AJAX कॉल के लिए JSON RESTful API को सुरक्षित कैसे करें?

API ग्राहक पक्ष AJAX कॉल (Ember.js से) और एक देशी Android मोबाइल एप्लिकेशन द्वारा (मानक से दोनों पहुँचा जा जाएगा HTTP अनुरोध)।

मैं दो बातों में देख रहा हूँ:

1) प्रमाणीकरण - कैसे पता करने के लिए जो उपयोगकर्ता एपीआई तक पहुँच रहा है, विकास में मैं प्रत्येक उपयोगकर्ता के लिए एक API कुंजी का इस्तेमाल किया और अनुरोध हेडर में इसे पारित

2) सुरक्षा - यह सुनिश्चित करने के लिए कि केवल वास्तविक प्रमाणीकृत उपयोगकर्ता ही निजी डेटा तक पहुंचें।

एपीआई कुंजी मूल मोबाइल क्लाइंट और AJAX कॉल के लिए दोनों की अच्छी रणनीति है? (उपयोगकर्ता एपीआई को उपयोगकर्ता + पास भेजता है और एपीआई कुंजी प्राप्त करता है, जिसका उपयोग अतिरिक्त अनुरोध बनाने के लिए किया जाता है)

क्या मुझे ओयूथ (1 या 2) जैसे कुछ दिखना चाहिए? मेरे पास वर्तमान में एपीआई तक पहुंचने के लिए तीसरे पक्ष के अनुप्रयोगों की योजना नहीं है इसलिए मुझे प्राधिकरण की आवश्यकता नहीं है, लेकिन यह भविष्य में बदल सकता है।

क्या इसका मतलब यह है कि मुझे अपना खुद का ओउथ प्रदाता सर्वर होना चाहिए?

+0

ओएथ आपकी समस्या के लिए एक अच्छा मौजूदा और सामान्य समाधान होगा जो कई संभावित भविष्य की समस्याओं को हल करता है। क्या इसका उपयोग करने के लिए आपके पास कोई कारण नहीं है? – mtsr

+0

मुझे ओएथ के साथ कोई अनुभव नहीं है इसलिए मैंने पहले रणनीति के बारे में पूछा .. क्या मुझे अपना ओएथ प्रदाता सर्वर चलाने की ज़रूरत है? –

+0

क्या आपको अभी जवाब मिला? मेरे पास एक ही पहेली है। –

उत्तर

0

आप सत्र स्टोर में संग्रहीत सत्र कुंजी के साथ सामान्य प्रमाणीकरण के लिए express.js सत्र का उपयोग कर सकते हैं। गैर-कुकी आरईएसटी कॉल के साथ संगतता के लिए, आप एक अतिरिक्त फ़ील्ड, "mySessionId" का उपयोग कर सकते हैं, क्वेरी में या अनुरोध के निकाय में जोड़ा गया है। फिर उस अतिरिक्त फ़ील्ड की जांच के लिए अपने प्रमाणीकरण सत्यापन को संशोधित करें। शायद एक उदाहरण अधिक उपयोगी होगा:

एक्सप्रेस में:

var server = express.createServer(); 
server.use(express.cookieParser()); 
server.use(express.session(sessionInfoObject)); 
server.get("/path/to/endpoint", function(request, response) { 
    if(typeof(request.query.mySessionId) != "undefined") { 
     // authenticate with the session id in mySessionId 
     // eg: if (getSession(request.query.mySessionId).isAuth) {} 
    } 
    else { 
     // session authentication, use request.session 
     // eg: if (getSession(request.query.mySessionId).isAuth) {} 
    } 
}); 

आप नीचे इस मार्ग से जाने के लिए, सुनिश्चित करें कि जब आप उपयोगकर्ता को प्रमाणित, आप भी उपयोगकर्ता से संबंधित डेटा में जोड़ने का निर्णय लेते हैं सत्र। यह आपके जीवन को बहुत आसान बना देगा। उदाहरण:

if(authenticated) { 
    request.session.isAuth = true; 
    request.session.customId = customId; 
} 

विकल्प हैं, लेकिन यह वह है जो मुझे सबसे आसान लगता है।

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