2013-06-25 15 views
8

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

भले ही यह 2 तरीके प्रमाणीकरण या केवल एपीआई कुंजी का उपयोग कर रहा हो।

  • उपयोगकर्ता अनुरोध पहली बार (पूर्व: https://www.xyz.com) के लिए आवेदन: तो यह साख की जाँच करने के
  • उपयोगकर्ता usernam प्रवेश प्रवेश पृष्ठ पर पुनः निर्देशित किया जाएगा क्या मैं थोड़ी देर के लिए तलाश कर रहा हूँ इस परिदृश्य पर है/पासवर्ड और
  • सर्वर की जांच https पर पोस्ट के माध्यम से इसे भेजा है, तो जानकारी तो मान्य है:

    • API कुंजी एक संसाधन के रूप में पहचान ग्राहक के लिए सर्वर द्वारा प्रदान किया जाना चाहिए इस उपयोगकर्ता नाम से (यहां सवाल है ??? !!!)

    • क्लाइंट को सुरक्षित तरीके से API कुंजी कैसे भेजें?

      • 1) मैं सत्र-कुकीज़ का उपयोग और एक कुकी में एपीआई कुंजी को बहाल किया जा सका तो (हर आने वाले अनुरोध पर इस एपीआई कुंजी का उपयोग इस हिंसक बाकी की स्टेटलेस है और मैं अगर यकीन नहीं करते यह सुरक्षित रूप से पर्याप्त है)।
      • 2) असल में मैं अन्य विकल्प नहीं जानते :) तुम्हारी बारी है अगर आप

मदद कर सकता है आपको एक उदाहरण देता सकता है यह मैं के रूप में एक बहुत मदद हो जाएगा लेख

:)

+0

यदि मैं केवल उपयोगकर्ताओं को प्रमाणित करने के लिए एपी कुंजी का उपयोग करने के दृष्टिकोण का उपयोग करता हूं तो सुरक्षित रूप से पर्याप्त है, मैं सुरक्षा के बारे में चिंतित हूं क्योंकि एप्लिकेशन के अंदर डेटा संवेदनशील है – ahmedsaber111

उत्तर

8

का पाया जाता है और पढ़ने के लिए बहुत सारे के बाद से कनेक्शन (HTTPS, कुछ भी आप तार पर भेजने सुरक्षित है सैद्धांतिक रूप से और आपके द्वारा दी गई mitm 'डी नहीं हैं)। सुनिश्चित नहीं है कि संपूर्ण एपीआई HTTPS (आपने निर्दिष्ट नहीं किया है) पर सेवा दी है, भले ही आप लॉगिन के हिस्से के रूप में कुंजी वापस कर सकें (जबकि अभी भी HTTPS की छतरी के नीचे), यदि शेष एपीआई नहीं है एचटीटीपीएस, कुंजी को अगले अनुरोध पर स्नीफ किया जा सकता है।

सत्र और कुकीज़ आम तौर पर एक विश्वसनीय आवेदन का हिस्सा नहीं हैं; आरईएसटी स्टेटलेस है।

गैर-एचटीटीपीएस (एचटीटीपीएस के साथ भी काम करेगा) के लिए एक घुमावदार कुंजी की तरह कुछ बेहतर होगा। आप HTTPS के माध्यम से लॉगिन करते हैं, सर्वर एपीआई कुंजी देता है, आप इसे अगले अनुरोध पर उपयोग करते हैं, सर्वर नई एपीआई कुंजी देता है, आप इसे अगले अनुरोध पर उपयोग करते हैं और इसी तरह। हालांकि यह गैर-एचटीटीपीएस पर एक एपीआई कुंजी से बेहतर है, यह सही नहीं है। अगर कोई बाद के अनुरोधों में से किसी एक से प्रतिक्रिया को छूता है और आप उस कुंजी का उपभोग नहीं करते हैं, तो वे इसका उपयोग कर सकते हैं। यह हमले वेक्टर को सर्वर से क्लाइंट से गैर-HTTPS प्रतिक्रिया में छोटा करता है, क्योंकि क्लाइंट से सर्वर का अनुरोध स्नीफ किया गया है, तो एपीआई कुंजी आपके वैध अनुरोध से पहले से ही खाई जाएगी। हालांकि, यदि आप HTTPS पर इसकी सेवा नहीं कर रहे हैं तो एपीआई को सुरक्षित करने के लिए और अधिक किया जाना चाहिए।

यदि यह मैं था, तो मैं + https पर हस्ताक्षर करने का अनुरोध देखता हूं।वहाँ अनुरोध पर हस्ताक्षर करने के कुछ बात यहाँ है: https://stackoverflow.com/a/8567909/183254

भी अधिकृत पचाने ग्राहक पर एपीआई सुरक्षित http://net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2/

एक छद्म कोड उदाहरण js समारोह के खंड पर कुछ जानकारी नहीं है

function get_calendar(){ 
    var key = $('#api_key').value(); 
    $.ajax({ 
     type: 'get', 
     url: '/index.php/api/calendar?key=' + key, 
     success: function(response){ 
      // show calendar 
      // ... 
      // set received api key in hidden field with id api_key 
      $('#api_key').value(response.api_key) 
     } 
    }) 
} 

उदाहरण नियंत्रक विधि:

function calendar_get($api_key = ''){ 
    if($api_key_matches){//verify incoming api key 
     $r = array(); 
     $r['calendar'] = $this->some_model->get_calendar(); 
     $r['api_key'] = $this->_generate_api_key();// generate or get api key 
    } 
    $this->response($r); 
} 
+0

मेरा सबसे बड़ा मुद्दा यह है कि मैं एपीआई-कुंजी कैसे भेज सकता हूं अगले अनुरोध – ahmedsaber111

+0

में इस एपीआई कुंजी का उपयोग करने में सक्षम होने के लिए सफल लॉगिन प्रयास के बाद उपयोगकर्ता ने कैलेंडर विधि के साथ जोड़ा और उदाहरण दिया। अनिवार्य रूप से केवल एक सरणी बनाएं और प्रतिक्रिया और एपीआई कुंजी को वहां फेंक दें और इसे '$ this-> प्रतिक्रिया() ' – stormdrain

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