एपीआई कुंजी बनाम HTTP ऑथेंटिकेशन बनाम OAuth एक RESTful API में


101

मैं उन अनुप्रयोगों में से एक के लिए एक RESTful API बनाने पर काम कर रहा हूं, जो मैं बनाए रखता हूं। वर्तमान में हम इसमें विभिन्न चीजों का निर्माण करना चाह रहे हैं जिन्हें अधिक नियंत्रित पहुंच और सुरक्षा की आवश्यकता होती है। एपीआई को सुरक्षित करने के बारे में शोध करने के लिए, मुझे कुछ अलग राय मिली कि किस फॉर्म का उपयोग करना है। मैंने देखा है कि कुछ संसाधन कहते हैं कि HTTP-Auth जाने का रास्ता है, जबकि अन्य API कुंजियों को पसंद करते हैं, और यहां तक ​​कि अन्य (SO पर यहां मुझे मिले सवालों सहित) OAuth द्वारा कसम खाते हैं।

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

मेरा प्रश्न, तब है - यह मानकर कि यह सब HTTPS पर किया गया है, तीनों में से कुछ व्यावहारिक अंतर क्या हैं? दूसरों पर कब विचार किया जाना चाहिए?


आपने आखिर क्या किया?
इरविन

@ इर्विन - मैंने यह प्रश्न कुछ समय पहले पूछा था और तब से इस परियोजना को आगे बढ़ा रहा हूं, लेकिन मैंने एपीआई कुंजियों और उत्पन्न पासवर्ड (जो कि उपयोगकर्ता कभी नहीं देखते हैं) के संयोजन का उपयोग करके समाप्त कर दिया, जो HTTP प्रमाणीकरण का उपयोग करके भेजे गए हैं।
शौना

जवाबों:


67

यह आपकी आवश्यकताओं पर निर्भर करता है। क्या आपको ज़रूरत है:

  • पहचान - जो एपीआई अनुरोध करने का दावा करता है?
  • प्रमाणीकरण - क्या वे वास्तव में वे हैं जो कहते हैं कि वे हैं?
  • प्राधिकरण - क्या उन्हें वह करने की अनुमति है जो वे करने की कोशिश कर रहे हैं?

या तीनों?

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

लेकिन, अगर आपको प्राधिकरण की आवश्यकता है, तो आपको केवल एपीआई के कॉलर के आधार पर कुछ विशेष संसाधनों तक पहुंच प्रदान करने की आवश्यकता है, फिर oAuth का उपयोग करें।

यहाँ एक अच्छा वर्णन है: http://www.srimax.com/index.php/do-you-need-api-keys-api-identity-vs-authorization/


"कुछ संसाधनों" से आपका मतलब है "कुछ एपीआई कॉल" या "कुछ डेटाबेस रिकॉर्ड्स", या दोनों?
मैग्ने

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

@ क्या मैं एक ऐसे ऐप पर काम कर रहा हूं जो फेसबुक या लिंक्डइन के साथ साइन अप करने वाले उपयोगकर्ताओं के पंजीकरण के लिए OAuth का उपयोग करता है। इसके अतिरिक्त हम डेटा को प्रबंधित करने के लिए अन्य सेवाओं के लिए अपना एपीआई खोल रहे हैं। उस स्थिति में, क्या आप API का उपयोग करने वाली सेवाओं के लिए OAuth को उपयोगकर्ता के लिए OAuth और उपयोगकर्ता नाम और पासवर्ड (जैसे आपके द्वारा जुड़े लेख में) की एपीआई कुंजी या संयोजन की सिफारिश करेंगे? OAuth और एपीआई कुंजी दोनों को अलग-अलग उद्देश्यों के लिए उपयोग किया जाता है, है ना?
टॉम डोए

@TomDoe हाय टॉम - हाँ जो समझ में आता है। आप शायद अब OAuth2 का उपयोग करना चाहते हैं। यदि आपका सर्वर पाइथन (Django या फ्लास्क) में है, तो github.com/omab/python-social-auth
Sid

मुझे समझ नहीं आ रहा है कि कैसे एपीआई कुंजी इन तीन चीजों को प्रदान नहीं कर सकती है। पहचान और प्रमाणीकरण दोनों ही "क्या आप किसी विशेष रहस्य को जानते हैं" पर आधारित हैं? (जब तक आप 2FA शुरू नहीं करते हैं, जो एक अलग विषय है)। यदि मैं उपयोगकर्ता 5 की बहुत लंबी एपीआई कुंजी देता हूं, तो वह दावा करता है और साबित करता हूं कि मैं उपयोगकर्ता 5 हूं, कम से कम उपयोगकर्ता नाम / पासवर्ड होगा। और कोई कारण नहीं है कि कोई व्यक्ति अलग-अलग एपीआई कुंजी के लिए अलग-अलग अनुमतियाँ असाइन नहीं कर सकता है। सही? मुझे यहां क्या समझ नहीं आ रहा है?
नाथन लॉन्ग

3

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

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

OAuth (ओपन ऑथराइजेशन) प्रत्यायोजित पहुंच के लिए एक मानक प्रोटोकॉल है , जिसका उपयोग अक्सर प्रमुख इंटरनेट कंपनियां पासवर्ड प्रदान किए बिना एक्सेस देने के लिए करती हैं। जैसा कि स्पष्ट है, OAuth प्रोटोकॉल है जो उपर्युक्त चिंताओं को पूरा करता है: संसाधन स्वामी की ओर से सर्वर संसाधनों को सुरक्षित प्रत्यायोजित पहुंच प्रदान करके प्रमाणीकरण और प्राधिकरण। यह एक्सेस टोकन तंत्र पर आधारित है जो 3 जी पार्टी को संसाधन स्वामी की ओर से सर्वर द्वारा प्रबंधित संसाधन तक पहुंच प्राप्त करने की अनुमति देता है। उदाहरण के लिए, सर्विसएक्स जॉन की ओर से जॉन स्मिथ के Google खाते तक पहुंचना चाहता है, एक बार जॉन ने प्रतिनिधिमंडल को अधिकृत किया है; सर्विसएक्स को तब Google खाते के विवरण तक पहुंचने के लिए समय-आधारित टोकन जारी किया जाएगा, केवल पढ़ने की पहुंच में बहुत संभावना है।

एपीआई कुंजी की अवधारणा ऊपर वर्णित OAuth टोकन के समान है। प्रतिनिधि अंतर के अभाव में मुख्य अंतर होता है: उपयोगकर्ता क्रमिक प्रोग्रामेटिक इंटरैक्शन के लिए सेवा प्रदाता से कुंजी का अनुरोध करता है। API कुंजी का मामला समय के आधार पर है: OAuth टोकन के रूप में कुंजी एक समय लीज, या समाप्ति अवधि के अधीन है। अतिरिक्त पहलू के रूप में, कुंजी के साथ-साथ टोकन भी सेवा अनुबंध द्वारा सीमित होने के अधीन हो सकता है, अर्थात प्रति सेकंड केवल कुछ अनुरोधों की सेवा दी जा सकती है।

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

  • प्रत्यक्ष प्रमाणीकरण और प्राधिकरण : पारंपरिक क्रेडेंशियल-आधारित संस्करणों के एक संस्करण के रूप में कुंजी-आधारित प्रोटोकॉल।
  • प्रत्यायित प्रमाणीकरण और प्राधिकरण : जैसे OAuth- आधारित प्रोटोकॉल, जो बदले में टोकन का उपयोग करता है, फिर से क्रेडेंशियल-आधारित संस्करणों के एक संस्करण के रूप में (समग्र लक्ष्य किसी भी 3 पार्टी के लिए पासवर्ड का खुलासा नहीं कर रहा है)।

दोनों श्रेणियां इच्छुक संसाधन (ओं) के मालिक सर्वर के साथ पहले बातचीत के लिए एक पारंपरिक पहचान सत्यापन वर्कफ़्लो का उपयोग करती हैं।

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