2010-10-10 12 views
13

मैं वर्तमान में सोच रहा हूं कि मैं अपने आरईएसटी एपीआई की रक्षा कैसे कर सकता हूं जिसका उपयोग केवल मेरे मोबाइल एप्लिकेशन द्वारा अन्य अनुप्रयोगों द्वारा किया जा रहा है? क्या एपीआई-कुंजी एक अच्छा समाधान हो सकता है, क्योंकि सिर्फ मुझे गुप्त एपीआई कुंजी पता है। क्या कोई बेहतर समाधान है?एक निजी आरईएसटी एपीआई को कैसे सुरक्षित रखें

+0

क्या आप यह स्पष्ट कर सकते हैं कि आप चाहते हैं कि (ए) यह सुनिश्चित करने के लिए कि केवल आप (या अधिकृत उपयोगकर्ता) आपकी सेवा का उपयोग कर सकते हैं या (बी) यह सुनिश्चित करने के लिए कि केवल आपका ग्राहक आवेदन आपकी सेवा का उपयोग कर सके? – Bruno

+0

मैं यह सुनिश्चित कर दूंगा कि केवल मेरा ग्राहक आवेदन मेरी सेवा का उपयोग कर सके। – LeonS

+0

मैंने सोचा था कि आरईएसटी का पूरा बिंदु एपीआई की आवश्यकता नहीं थी? (आरपीसी की तरह ...) – Anders

उत्तर

3

HTTP प्रमाणीकरण का उपयोग करें। आरईएसटी HTTP में उपलब्ध सुविधाओं का उपयोग करने के बारे में है, इसलिए देशी HTTP ऑथ का उपयोग किया जाना चाहिए। बुनियादी प्रमाणीकरण के साथ आपको हालांकि HTTPS का उपयोग करना होगा। यदि आप HTTP पाचन ऑथ या एनटीएलएम का उपयोग नहीं कर सकते हैं।

उनमें से सभी की अलग-अलग शक्तियां और कमजोरियां हैं, और उनमें से प्रत्येक को आपके HTTP सर्वर और क्लाइंट लाइब्रेरी द्वारा समर्थित नहीं किया जा सकता है।

+0

तो अगर मैं एचटीटीपीएस के साथ संयोजन में HTTP मूल प्रमाणीकरण का उपयोग करता हूं, तो मैं सुरक्षित पक्ष पर हूं? खासकर कि मुझे छोड़कर कोई भी मेरे एपीआई का उपयोग नहीं करेगा? – LeonS

+0

लियोन यदि आपका क्लाइंट और सर्वर फ़ायरवॉल के पीछे दोनों नहीं हैं तो आपको अपने कनेक्शन को स्नीफ करने वाले किसी पैकेट के बारे में चिंतित होना होगा। एचटीटीपीएस आपके कनेक्शन को एन्क्रिप्ट करता है ताकि इसे स्नीफ नहीं किया जा सके और मूल प्रमाणीकरण आपके द्वारा इच्छित एपीआई कुंजी प्रदान करता है। –

+0

भले ही मैं उपयोगकर्ता नाम और पासवर्ड के साथ कई उपयोगकर्ताओं को प्रदान करता हूं? तो मैं किसी अन्य एप्लिकेशन के साथ अपने एपीआई का उपयोग कर किसी और से डरता हूं। क्या मैं इसे https के साथ छोड़ सकता हूं? – LeonS

17

लियोन, आप "किसी अन्य एप्लिकेशन के साथ मेरे एपीआई का उपयोग कर किसी और का उल्लेख" करते रहेंगे। तो, आप केवल एक आवेदन द्वारा उपयोग करने के लिए अपने एपीआई बांधना चाहते हैं? इसलिए, आप किसी उपयोगकर्ता को एक्सेस अधिकार नहीं देना चाहते हैं, आप उन्हें अपने एप्लिकेशन के उदाहरण के बजाय उपयोगकर्ता के मोबाइल डिवाइस पर चलाना चाहते हैं।

संक्षेप में: आप उपयोगकर्ता पर भरोसा नहीं करते हैं!

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

यदि आपका ऐप लोकप्रिय/दिलचस्प हो जाता है, तो इस तथ्य पर भरोसा करें कि इस तरह की चीज़ों पर बहुत अच्छे लोग आपके आवेदन को देखेंगे और इससे पहले कि आप इसे जानते हों, आपके एन्क्रिप्शन को तोड़ देंगे। हो सकता है कि यदि आप स्काइप के रूप में उसी प्रयास में डाल देते हैं, तो हो सकता है कि आप उन्हें थोड़ी देर के लिए रोक दें।

लेकिन खुद से पूछें: परेशान क्यों? मैं अपने उपयोगकर्ताओं पर भरोसा क्यों नहीं करता? क्या यह वास्तव में मेरे एपीआई का उपयोग करने से कुछ अन्य एप्लिकेशन को रोकने के लिए हुप्स के माध्यम से कूदने के लायक है?

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