मोबाइल एप्लिकेशन के लिए एक एपीआई बनाना - प्रमाणीकरण और प्राधिकरण


189

अवलोकन

मैं अपने एप्लिकेशन के लिए (REST) ​​API बनाना चाह रहा हूं। प्रारंभिक / प्राथमिक उद्देश्य मोबाइल एप्लिकेशन (iPhone, Android, सिम्बियन, आदि) द्वारा खपत के लिए होगा। मैं वेब-आधारित एपीआई (अन्य कार्यान्वयनों का अध्ययन करके) प्रमाणीकरण और प्रमाणीकरण के लिए विभिन्न तंत्रों में देख रहा हूं। मैंने अपना सिर ज्यादातर मूलभूत अवधारणाओं के आसपास लपेट लिया है, लेकिन अभी भी कुछ क्षेत्रों में मार्गदर्शन की तलाश कर रहा हूं। आखिरी चीज जो मैं करना चाहता हूं, वह पहिया को फिर से मजबूत करना है, लेकिन मुझे कोई भी मानक समाधान नहीं मिल रहा है जो मेरे मानदंड को फिट करता है (हालांकि मेरे मानदंड मेरे भ्रामक हैं इसलिए समीक्षकों के लिए स्वतंत्र महसूस करते हैं)। इसके अतिरिक्त, मैं चाहता हूं कि एपीआई सभी प्लेटफार्मों / अनुप्रयोगों के लिए समान हो।

oAuth

मैं आगे जाऊंगा और अपनी आपत्ति को oAuth पर फेंक दूंगा क्योंकि मुझे पता है कि संभवतः पहला समाधान पेश किया जाएगा। मोबाइल एप्लिकेशन (या अधिक विशेष रूप से गैर-वेब एप्लिकेशन) के लिए, प्रमाणीकरण के लिए आवेदन को छोड़ना (वेब-ब्राउज़र में जाना) बस गलत लगता है। इसके अतिरिक्त, ब्राउज़र को एप्लिकेशन (विशेष रूप से क्रॉस-प्लेटफ़ॉर्म) पर कॉलबैक वापस करने के लिए कोई रास्ता नहीं है (मुझे पता है)। मुझे पता है कि ऐसा करने वाले कुछ ऐप हैं, लेकिन यह सिर्फ गलत लगता है और एप्लिकेशन UX में ब्रेक देता है।

आवश्यकताएँ

  1. उपयोगकर्ता आवेदन में उपयोगकर्ता नाम / पासवर्ड दर्ज करता है।
  2. हर एपीआई कॉल की पहचान कॉलिंग एप्लिकेशन द्वारा की जाती है।
  3. ओवरहेड को न्यूनतम तक रखा जाता है और डेवलपर्स के लिए सामान्य पहलू सहज होता है।
  4. तंत्र दोनों अंतिम उपयोगकर्ता (उनके लॉगिन क्रेडेंशियल उजागर नहीं होते हैं) और साथ ही डेवलपर (उनके आवेदन क्रेडेंशियल्स उजागर नहीं किए जाते हैं) के लिए सुरक्षित है।
  5. यदि संभव हो, तो https की आवश्यकता नहीं है (किसी भी तरह से एक कठिन आवश्यकता नहीं है)।

कार्यान्वयन पर मेरे वर्तमान विचार

एक बाहरी डेवलपर एक एपीआई खाते का अनुरोध करेगा। उन्हें एक माफी और अपीस्त प्राप्त होगी। हर अनुरोध को न्यूनतम तीन मापदंडों की आवश्यकता होगी।

  • apikey - regisration में डेवलपर को दिया गया
  • टाइमस्टैम्प - किसी दिए गए एपिक के लिए प्रत्येक संदेश के लिए एक अद्वितीय पहचानकर्ता के रूप में डबल्स
  • हैश - टाइमस्टैम्प + एपिसिस्रेट का हैश

अनुरोध जारी करने वाले आवेदन की पहचान करने के लिए माफी की आवश्यकता है। टाइमस्टैम्प oauth_nonce के समान कार्य करता है और फिर से हमलों को रोकता / मिटता है। हैश सुनिश्चित करता है कि अनुरोध वास्तव में दिए गए एपिक के मालिक से जारी किया गया था।

प्रामाणिक अनुरोधों के लिए (उपयोगकर्ता की ओर से किए गए), मैं अभी भी एक्सेस_टोकन मार्ग या उपयोगकर्ता नाम और पासवर्ड हैश कॉम्बो के साथ जाने के बीच अनिर्दिष्ट हूं। किसी भी तरह, कुछ बिंदु पर एक उपयोगकर्ता नाम / पासवर्ड कॉम्बो की आवश्यकता होगी। इसलिए जब यह होता है, तो सूचनाओं के कई टुकड़ों (apikey, apisecret, टाइमस्टैम्प) + का एक हैश इस्तेमाल किया जाता है। मुझे इस पहलू पर प्रतिक्रिया मिलेगी। FYI करें, उन्हें पहले पासवर्ड हैश करना होगा, क्योंकि मैं अपने सिस्टम में हैशिंग के बिना पासवर्ड स्टोर नहीं करता।

निष्कर्ष

FYI करें, यह केवल एपीआई के निर्माण / संरचना करने के लिए अनुरोध नहीं है कि केवल एक आवेदन के भीतर प्रमाणीकरण और प्राधिकरण से कैसे निपटें।

रैंडम विचार / बोनस प्रश्न

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

हैश की बात करते हुए, md5 बनाम hmac-sha1 के बारे में क्या? क्या यह वास्तव में मायने रखता है जब सभी मान पर्याप्त रूप से लंबे डेटा (यानी। एपिसेक्रेट) के साथ हैशेड हो।

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


1
कुछ और टिप्पणी / सुझाव पाने की उम्मीद कर रहा था। क्या प्रश्न बहुत अस्पष्ट / अस्पष्ट है?
jsuggs

6
सवाल एकदम सही है, लेकिन लगभग 2 साल बाद भी, oauth कार्यान्वयन आर्कन लगता है ... मैं सबसे कठिन समय हासिल कर रहा हूं, जो आपने ऊपर चर्चा की है। मेरे पास एक अतिरिक्त आयाम है: मैं एक लॉगिननाम / पासवर्ड जोड़ी का उपयोग नहीं करना चाहता हूं - मैं एंड्रॉइड / आईओएस पर Google पहचान सत्यापन का उपयोग करना चाहता हूं (सिम्बियन को डब्ल्यूडब्ल्यूएफ द्वारा "लगभग-विलुप्त प्रजाति" घोषित किया गया था) और मैं इसके लिए विकसित होने से इनकार करता हूं विंडोज़ मोबाइल (जो भी वे इसे इन दिनों कहते हैं)।
टोनी गिल

8
यह बहुत ही हास्यास्पद है कि हर कोई oauth 2.0 ive को एक स्पष्ट, सरल ट्यूटोरियल या उदाहरण खोजने के लिए सुझाव देता है जो चरणों, आवश्यकताओं, do's और donts ect के बारे में बताने के लिए सामान्य अंग्रेजी का उपयोग करता है ....
ChuckKelly

2
OAuth2.0 के इस विशिष्ट प्रवाह पर पढ़ें (संसाधन स्वामी पासवर्ड प्रवाह)। वेबसाइट पर पुनर्निर्देशन नहीं। techblog.hybris.com/2012/06/11/…
फ्रैंकलिन

1
मैं भी उसी जवाब की तलाश में हूं। मुझे एक अच्छा लेख मिला जो हाल ही में लिखा गया था। आशा है कि ये आपकी मदद करेगा। स्टॉर्मपथ.com
to

जवाबों:


44

जिस तरह से मैं अपनी परियोजनाओं में इस का लॉगिन हिस्सा करने के बारे में सोच रहा हूं वह है:

  1. लॉगिन से पहले उपयोगकर्ता login_tokenसर्वर से अनुरोध करता है। ये अनुरोध पर सर्वर पर उत्पन्न और संग्रहीत किए जाते हैं, और शायद एक सीमित जीवनकाल है।

  2. लॉगिन करने के लिए एप्लिकेशन यूजर्स पासवर्ड के हैश की गणना करता है, फिर login_tokenवैल्यू पाने के लिए पासवर्ड को हैश करता है, फिर वे दोनों login_tokenऔर संयुक्त हैश को वापस करते हैं ।

  3. सर्वर चेक वह login_tokenहै जो उसने उत्पन्न किया है, उसे मान्य login_tokens की सूची से हटाकर । सर्वर तब उपयोगकर्ता के पासवर्ड के अपने संग्रहीत हैश को जोड़ता है login_tokenऔर यह सुनिश्चित करता है कि यह जमा किए गए टोकन से मेल खाता है। यदि यह मेल खाता है तो आपने अपने उपयोगकर्ता को प्रमाणित कर दिया है।

इसका लाभ यह है कि आप कभी भी उपयोगकर्ता के पासवर्ड को सर्वर पर संग्रहीत नहीं करते हैं, पासवर्ड कभी भी स्पष्ट रूप से पारित नहीं होता है, पासवर्ड हैश केवल खाते के निर्माण पर स्पष्ट में पारित किया जाता है (हालांकि इसके चारों ओर तरीके हो सकते हैं), और यह होना चाहिए पुनरावृत्ति के हमलों से सुरक्षित है क्योंकि login_tokenउपयोग पर डीबी से हटा दिया गया है।


धन्यवाद, मैं आवेदन पक्ष पर पासवर्ड हैशिंग के बारे में भाग जोड़ना भूल गया। मैं अपने उपयोगकर्ताओं के पासवर्ड को स्पष्ट (स्टोर करने से पहले हैश) में संग्रहीत नहीं करता हूं।
jsuggs

2
मुझे इस पद्धति का नकारात्मक पहलू दिखाई देता है: आप डीबी में नमकीन पासवर्ड स्टोर नहीं कर सकते। यदि हमलावर आपके DB पर हाथ रखते हैं तो उन्हें कोई डिक्रिप्शन करने की आवश्यकता नहीं होगी। चूंकि इस योजना में पासवर्ड हैश असली पासवर्ड है।
सिगॉड

2
@sigod आप सही हैं। हालांकि मुझे लगता है कि वहाँ एक बुनियादी द्वैध है - आपको या तो अपने परिवहन पर भरोसा करने की आवश्यकता है, या आपको अपने भंडारण पर भरोसा करने की आवश्यकता है। लॉगिन सिस्टम जो नमकीन पासवर्ड का उपयोग करते हैं, परिवहन परत पर भरोसा करते हैं - और इसलिए उपयोगकर्ता से पासवर्ड को प्रमाणीकरण प्रणाली में पास करें। यह मामला ट्रांसपोर्ट लेयर पर विश्वास नहीं कर रहा है (मुझे लगता है कि ऐसा इसलिए था क्योंकि मैं जिस प्लेटफॉर्म को निशाना बना रहा था, उसमें SHTTP का बुरा समर्थन था)। यदि आप परिवहन परत पर भरोसा करते हैं तो आप अन्य ट्रेड-ऑफ करने में सक्षम हो सकते हैं।
माइकल एंडरसन

मुझे 3 समस्याएं हैं: 1) उपयोगकर्ता का पासवर्ड सर्वर पर कभी कैसे संग्रहीत नहीं होता है? चरण 2 में आपने उल्लेख किया कि यह हैशेड उपयोगकर्ता के पासवर्ड को संग्रहीत करता है। 2) उपयोगकर्ता पासवर्ड कभी भी स्पष्ट में पारित नहीं होता है। लेकिन यह वास्तव में क्लाइंट पर हैशेड है और फिर सर्वर पर हैशेड पासवर्ड के साथ तुलना की जाती है, जो कि लगभग स्पष्ट रूप से गुजरने और संग्रहीत करने के समान है, ऐसा करने का क्या मतलब है? 3) यह विधि मानती है कि हमलावर को पता नहीं है कि कैसे login_token + पासवर्ड हैशेड है, जो किर्कहॉफ्स सिद्धांत का उल्लंघन करता है और यह वास्तव में असुरक्षित बनाता है।
ताम्र शालाश

14

यह एक में बहुत सारे सवाल हैं, मुझे लगता है कि बहुत से लोग अंत तक सभी तरह से पढ़ने का प्रबंधन नहीं करते हैं :)

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

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

हैशिंग के लिए, sha1 थोड़ा बेहतर है, लेकिन इसके बारे में मत लटकाओ - जो भी डिवाइस आसानी से (और प्रदर्शन अर्थ में) आसानी से लागू हो सकता है वह ठीक है।

आशा है कि मदद करता है, सौभाग्य :)


जवाब देने के लिए धन्यवाद। मैं xAuth में देख रहा हूं और यह वह मार्ग हो सकता है जो मैं जाता हूं ताकि मैं एक oAuth स्थापना के साथ समाप्त हो सकूं, जो एपीआई के साथ बातचीत के लिए एक अधिक मानकीकृत प्रक्रिया के लिए बनाता है।
jsuggs

9

तो क्या आप के बाद कर रहे हैं सर्वर साइड प्रमाणीकरण तंत्र के कुछ प्रकार है कि एक मोबाइल आवेदन के प्रमाणीकरण और प्राधिकरण पहलुओं को संभाल लेंगे?

अगर यह मामला है, तो मुझे लगता है कि यह इस प्रकार होगा (लेकिन केवल 'क्योंकि मैं एक जावा डेवलपर हूं इसलिए एक सी # आदमी इसे अलग तरीके से करेगा):

प्रतिष्ठित प्रमाणीकरण और प्राधिकरण सेवा

  1. यह केवल ईटीटीपीएस को रोकने के लिए HTTPS पर काम करेगा।
  2. यह RESTEasy , स्प्रिंग सिक्योरिटी और CAS (कई अनुप्रयोगों पर एकल साइन के लिए) के संयोजन पर आधारित होगा ।
  3. यह ब्राउज़र और वेब-सक्षम क्लाइंट एप्लिकेशन दोनों के साथ काम करेगा
  4. उपयोगकर्ताओं को अपने विवरणों को संपादित करने की अनुमति देने के लिए एक वेब-आधारित खाता प्रबंधन इंटरफ़ेस होगा, और प्राधिकरण स्तरों को बदलने के लिए व्यवस्थापक (विशेष अनुप्रयोगों के लिए)

ग्राहक पक्ष सुरक्षा पुस्तकालय / आवेदन

  1. प्रत्येक समर्थित प्लेटफॉर्म के लिए (जैसे सिम्बियन, एंड्रॉइड, आईओएस आदि) प्लेटफॉर्म की मूल भाषा (जैसे जावा, ऑब्जेक्टिव, सी आदि) में सुरक्षा लाइब्रेरी का एक उपयुक्त कार्यान्वयन बनाते हैं।
  2. लाइब्रेरी को दिए गए प्लेटफ़ॉर्म के लिए उपलब्ध API का उपयोग करके HTTPS अनुरोध फॉर्मेशन का प्रबंधन करना चाहिए (जैसे जावा URLConnection आदि का उपयोग करता है)
  3. सामान्य प्रमाणीकरण और प्राधिकरण पुस्तकालय ('यह सब है) के उपभोक्ता एक विशिष्ट इंटरफ़ेस के लिए कोड करेंगे और खुश नहीं होंगे अगर यह कभी बदलता है तो सुनिश्चित करें कि यह बहुत लचीला है। स्प्रिंग सुरक्षा जैसे मौजूदा डिज़ाइन विकल्पों का पालन करें।

तो अब जब 30,000 फीट से दृश्य पूरा हो गया है तो आप इसे कैसे करेंगे? खैर, ब्राउज़र क्लाइंट के साथ सर्वर साइड पर सूचीबद्ध तकनीकों के आधार पर प्रमाणीकरण और प्राधिकरण प्रणाली बनाना कठिन नहीं है। HTTPS के संयोजन में, फ्रेमवर्क प्रमाणीकरण प्रक्रिया द्वारा उत्पन्न एक साझा टोकन (आमतौर पर एक कुकी के रूप में प्रस्तुत) के आधार पर एक सुरक्षित प्रक्रिया प्रदान करेगा और जब भी उपयोगकर्ता कुछ करने की इच्छा रखता है। जब भी कोई अनुरोध होता है तो यह टोकन क्लाइंट द्वारा सर्वर को प्रस्तुत किया जाता है।

स्थानीय मोबाइल एप्लिकेशन के मामले में, ऐसा लगता है कि आप एक समाधान के बाद हैं जो निम्न कार्य करता है:

  1. क्लाइंट एप्लिकेशन में विधि कॉल पर रनटाइम एक्सेस को नियंत्रित करने के लिए एक परिभाषित एक्सेस कंट्रोल लिस्ट (ACL) है। उदाहरण के लिए, एक दिया उपयोगकर्ता एक विधि से एक संग्रह पढ़ सकता है, लेकिन उनका एसीएल केवल उन वस्तुओं तक पहुंच की अनुमति देता है जिनके नाम में एक क्यू है इसलिए संग्रह में कुछ डेटा सुरक्षा अवरोधक द्वारा खींची गई विविधता है। जावा में यह सीधा है, आप बस कॉलिंग कोड पर स्प्रिंग सुरक्षा एनोटेशन का उपयोग करते हैं और एक उपयुक्त एसीएल प्रतिक्रिया प्रक्रिया को लागू करते हैं। अन्य भाषाओं में, आप अपने दम पर हैं और आपको बॉयलरप्लेट सुरक्षा कोड प्रदान करने की आवश्यकता होगी जो आपके सुरक्षा पुस्तकालय में कॉल करता है। यदि भाषा AOP (Aspect Oriented Programming) का समर्थन करती है तो इस स्थिति के लिए इसे पूर्ण रूप से उपयोग करें।
  2. सुरक्षा लाइब्रेरी वर्तमान एप्लिकेशन के लिए निजी मेमोरी में प्राधिकरणों की पूरी सूची को कैश करती है ताकि उसे कनेक्ट नहीं रहना पड़े। लॉगिन सत्र की लंबाई के आधार पर, यह एक एकल-बंद ऑपरेशन हो सकता है जो कभी भी दोहराया नहीं जाता है।

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

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


धन्यवाद, अच्छी जानकारी। सवालों के जोड़े। सबसे पहले, अगर ईव्सड्रॉपिंग स्वीकार्य है (यह सुनिश्चित नहीं है कि यह / नहीं है, तो मेरे आवेदन को ध्यान में रखते हुए कोई वास्तविक व्यक्तिगत / मूल्यवान जानकारी नहीं है, लेकिन अगर यह मेरा औचित्य बदल जाएगा) तो वास्तव में HTTPS की आवश्यकता है?
jsuggs

आप चाहें तो HTTPS के बाहर समग्र प्रणाली संचालित कर सकते हैं। HTTPS केवल गुप्त जानकारी को सुरक्षित रखने के लिए है, इसलिए मैं मानूंगा कि प्रमाणीकरण चरण के दौरान आप HTTPS के माध्यम से कुछ गारंटी प्रदान करेंगे कि आपका उपयोगकर्ता नाम / पासवर्ड / गुप्त गुप्त रखा जाए। प्रतिक्रिया में टोकन सौंप दिए जाने के बाद तब आगे के अनुरोधों को स्पष्ट किया जा सकता है यदि स्ट्रीम में मौजूद जानकारी (जिसे प्राप्त करने के लिए आवश्यक प्रमाणीकरण) को eavesdroppers से सुरक्षा की आवश्यकता नहीं है।
गैरी रोवे

इसके अलावा, CAS प्रमाणीकरण प्रोटोकॉल का यह विवरण उपयोगी हो सकता है: jasig.org/cas/protocol
गैरी रोवे

9

Twitter ने बाहरी अनुप्रयोग समस्या को oAuth में संबोधित किया, एक संस्करण का समर्थन करके जिसे वे xAuth कहते हैं । दुर्भाग्य से इस नाम के साथ अन्य योजनाओं का ढेर पहले से ही है, इसलिए इसे सुलझाना मुश्किल हो सकता है।

प्रोटोकॉल है सिवाय यह अनुरोध टोकन चरण को छोड़ देता है और केवल तुरंत एक्सेस जोड़ी टोकन एक उपयोगकर्ता नाम और पासवर्ड के प्राप्त होने पर जारी करता है, oAuth। ( यहां चरण ई पर शुरू ।) यह प्रारंभिक अनुरोध और प्रतिक्रिया सुरक्षित होनी चाहिए- यह यूजर नेम और पासवर्ड को प्लेनटेक्स्ट में भेज रहा है और एक्सेस टोकन और सीक्रेट टोकन वापस प्राप्त कर रहा है। एक बार एक्सेस टोकन जोड़ी जाने के बाद, चाहे शुरुआती टोकन एक्सचेंज outh मॉडल के माध्यम से हो या xAuth मॉडल बाकी सत्र के लिए क्लाइंट और सर्वर दोनों के लिए अप्रासंगिक हो। इसका लाभ यह है कि आप मौजूदा oAuth अवसंरचना का लाभ उठा सकते हैं और मोबाइल / वेब / डेस्कटॉप अनुप्रयोगों के लिए लगभग समान कार्यान्वयन हो सकते हैं। मुख्य नुकसान यह है कि एप्लिकेशन को क्लाइंट के उपयोगकर्ता नाम और पासवर्ड तक पहुंच प्रदान की जाती है, लेकिन ऐसा लगता है कि आपकी आवश्यकताएं इस दृष्टिकोण को जनादेश देती हैं।

किसी भी मामले में, मैं आपके अंतर्ज्ञान और यहां कई अन्य उत्तरदाताओं से सहमत होना चाहूंगा: खरोंच से कुछ नया बनाने की कोशिश न करें। सुरक्षा प्रोटोकॉल शुरू करना आसान हो सकता है लेकिन हमेशा अच्छा करने के लिए कठिन होते हैं, और जितने अधिक जटिल वे आपके तीसरे पक्ष के डेवलपर्स को उनके खिलाफ लागू करने में सक्षम होने की संभावना कम हो जाती है। आपका काल्पनिक प्रोटोकॉल o (x) Auth - api_key / api_secret, nonce, sha1 hashing - के समान है, लेकिन इसके बजाय कई मौजूदा पुस्तकालयों में से एक का उपयोग करने में सक्षम होने के बजाय आपके डेवलपर्स को अपना रोल करने की आवश्यकता है।


2
मुझे यह भी बताना चाहिए कि ऐसा लगता है कि 'स्किप रिक्वेस्ट टोकन' का एंडपॉइंट oAuth 2 में आने वाला है, इसे वर्तमान ड्राफ्ट में "पासवर्ड" एक्सेस अनुदान प्रकार के रूप में सूचीबद्ध किया गया है। अनुभाग 4.1.2 देखें: tools.ietf.org/html/draft-ietf-oauth-v2-10#section-4.1.2
lantius

जैसे मैंने लोनरा का उल्लेख किया है, मैं एक्सऑथ में और अधिक देख रहा हूं और विशेष रूप से आपके द्वारा अंत में बताए गए कारणों के लिए ... डेवलपर्स आपको मेरे एपीआई के साथ बातचीत करने के लिए शेल्फ "ऑउथ टूल्स / लिबास" को बंद कर सकते हैं, जो "एक अच्छी बात है" ।
jsuggs

6

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

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

प्रस्तावित समाधान में आप उल्लेख करते हैं कि न्यूनतम तीन मापदंडों की आवश्यकता होगी:

  • apikey - पंजीकरण में डेवलपर को दिया गया
  • टाइमस्टैम्प - किसी दिए गए एपिक के लिए प्रत्येक संदेश के लिए एक अद्वितीय पहचानकर्ता के रूप में डबल्स
  • हैश - टाइमस्टैम्प + एपिसिस्रेट का हैश

इसका निहितार्थ यह है कि कुछ एपीआई कॉल के लिए उपयोगकर्ता नाम / पासवर्ड की आवश्यकता नहीं होती है। यह उन अनुप्रयोगों के लिए उपयोगी हो सकता है जहाँ आप एक लॉगिन (उदाहरण के लिए ऑनलाइन दुकानों में ब्राउज़ करना) को बाध्य नहीं करना चाहते हैं।

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

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

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.