OAuth2 ROPC बनाम सार्वजनिक प्रतिष्ठा API के लिए मूल प्रामाणिक?


21

विशिष्ट उपयोग का मामला जो मैं यहाँ देख रहा हूँ, वह सार्वजनिक रूप से उपलब्ध सर्वर एंडपॉइंट्स (जैसे पब्लिक रेस्ट एपीआई) के विरुद्ध REST क्लाइंट को प्रमाणित कर रहा है।

यहां सबसे सरल उपाय है बेसिक ऑथेंटिक । लेकिन मैंने अक्सर OAuth2 को लगभग सभी परिस्थितियों में एक बेहतर स्थिति समाधान के रूप में सुना है।

बात यह है कि, केवल OAuth2 अनुदान प्रकार, जो किसी REST सर्वर के विरुद्ध प्रमाणित क्लाइंट के लिए संभव है, रिसोर्स ओनर पासवर्ड क्रेडेंशियल्स (ROPC) है , क्योंकि कोड ग्रांट और इंप्लिक्ट ग्रांट्स को UI (वेब ​​सर्वर द्वारा होस्ट किए गए) उपयोगकर्ता लॉगिन और मैन्युअल रूप से क्लाइंट ऐप को अधिकृत करता है।

जिस तरह से ROPC काम करता है, वह संसाधन स्वामी के उपयोगकर्ता नाम / पासवर्ड और क्लाइंट आईडी को क्वेरी स्ट्रिंग परम के रूप में भेजकर है ? यह और भी कम सुरक्षित (IMHO) है तो बेसिक ऑथ, जो कम से कम बेस -64 क्रेडेंशियल्स को एन्कोड करता है और उन्हें हेडर के अंदर भेजता है जिसे टीएलएस द्वारा एन्क्रिप्ट किया जा सकता है!

इसलिए मैं पूछता हूं: सार्वजनिक रीस्ट एपीआई के संदर्भ में, क्या OAuth2 ROPC वास्तव में बेसिक ऑथेंट से बेहतर है? OAuth2 ROPC से अधिक सुरक्षित क्या है?


अपडेट करें

मैं सिर्फ इस उत्कृष्ट लेख को पढ़ता हूं जो अमेज़ॅन के गैर- OAuth2 आधारित REST सुरक्षा को AWS के लिए बताता है। यह अनिवार्य रूप से एक निजी कुंजी-आधारित समाधान है, जहां प्रत्येक रीस्ट अनुरोध के हैश उत्पन्न होते हैं और सामान्य (अन-एन्क्रिप्टेड) ​​अनुरोध के साथ साइडकार के रूप में भेजे जाते हैं। केवल क्लाइंट और सर्वर निजी कुंजी को जानते हैं, इसलिए जब सर्वर अनुरोध प्राप्त करता है (फिर से, सामान्य अनुरोध + हैशेड अनुरोध युक्त), सर्वर क्लाइंट की निजी कुंजी को देखता है, सामान्य अनुरोध के लिए उसी हैश को लागू करता है, और फिर दो हैश की तुलना करता है।

यह OAuth2 के ROPC की तुलना में अधिक जटिल, जटिल और सुरक्षित लगता है! जब तक मैं यहाँ कुछ प्रमुख याद कर रहा हूँ , OAuth2 ROPC सिर्फ भेज रहा है client_id, usernameऔर passwordक्वेरी स्ट्रिंग परम के रूप में ... पूरी तरह से और पूरी तरह से असुरक्षित! यह HMAC / हैशेड-आधारित समाधान अधिक प्रभावशाली और सुरक्षित लगता है।

बात यह है कि, उस लेख के लेखक ने भी कहा:

आप [इच्छा] भी धीरे-धीरे महसूस करेंगे और स्वीकार करेंगे कि कुछ बिंदु पर आपको OAuth को लागू करना होगा ...

बा-बा-bwhat?!?! यदि OAuth2 इस चतुर HMAC / हैश-आधारित समाधान से कम सुरक्षित है, तो इस लेख के लेखक को क्यों लगता है कि OAuth को किसी बिंदु पर गले लगाने की आवश्यकता है। मैं बहुत उलझन में हूँ।


आप किस तरह के क्लाइंट के बारे में बात कर रहे हैं? मुझे लगता है कि अधिकांश ग्राहकों के पास एक यूआई होगा। जिस स्थिति में, आप OAuth लॉगिन पेज को वेबव्यू (डेस्कटॉप, मोबाइल) में लोड कर सकते हैं या इसे सीधे (वेब) पर रीडायरेक्ट कर सकते हैं। मैं यह नहीं देखता कि आपको UI से बचने की आवश्यकता क्यों है।
5

@decyclone कृपया प्रश्न के पहले वाक्य को पढ़ें! मैं REST (हेडलेस HTTP) क्लाइंट के बारे में ले रहा हूँ जो REST सेवाओं के विरुद्ध प्रमाणीकरण कर रहा है।
10

मैं जो सवाल पूछ रहा हूं वह यह है कि क्या ग्राहक के पास कोई यूआई है? यहां तक ​​कि अगर यह नहीं था, तो मैंने कम से कम प्रमाणीकरण के लिए किसी भी यूआई पॉप के साथ आवेदन नहीं देखा है।
13

@decyclone कोई शुद्ध REST क्लाइंट के पास कोई UI नहीं है, हालाँकि UI आमतौर पर एक REST सेवा से कनेक्ट करने के लिए एक शुद्ध REST क्लाइंट का उपयोग करता है। एक उपयोग मामला एक कमांड लाइन उपकरण है जो REST सेवा के लिए उपयोगकर्ता कमांड (शेल पर दर्ज) भेजने के लिए एक REST क्लाइंट का उपयोग करता है। एक खोल से एक यूआई रोकना सिर्फ यहाँ एक स्वीकार्य समाधान नहीं है।
13

1
लेकिन, मुझे ध्यान देना चाहिए, कमांड लाइन / शेल के बाहर अन्य उपयोग के बहुत सारे मामले हैं। एक अन्य उपयोग मामला जावा / रूबी / पायथन शुद्ध रीस्ट / एचटीटीपी क्लाइंट है जिसका कोई यूआई नहीं है और वह बैकएंड सर्वर पर चल सकता है जिसमें कोई यूआई नहीं है। बैकएंड सर्वर को REST पर किसी अन्य बैकेंड सर्वर के साथ संवाद करने की आवश्यकता होती है। यहां, न केवल यूआई को पॉप करने के लिए यह अजीब और हैकिया होगा जब बैकएंड सर्वर # 1 को बैकएंड सर्वर # 2 से बात करने की आवश्यकता होती है, तो असली समस्या यह है कि लॉगिन पेज प्रदर्शित करने के लिए कोई ब्राउज़र / यूआई क्लाइंट नहीं है, और कोई मानव नहीं है वहाँ लॉग इन करने के लिए किया जा रहा है !!!
13

जवाबों:


24

आपके प्रश्न का उत्तर कोड स्तर, प्रोटोकॉल स्तर या वास्तुकला स्तर पर हो सकता है। मैं यहाँ अधिकतर प्रोटोकॉल स्तर के मुद्दों को संक्षेप में प्रस्तुत करने का प्रयास करूँगा क्योंकि यह आमतौर पर पेशेवरों और विपक्षों के विश्लेषण में महत्वपूर्ण है। ध्यान रखें कि OAuth2 रिसोर्स ओनर पासवर्ड क्रेडेंशियल्स की तुलना में बहुत अधिक है , जो कि विनिर्देश के अनुसार, "विरासत या माइग्रेशन कारणों" के लिए मौजूद है, "अन्य अनुदान प्रकारों की तुलना में उच्च जोखिम" माना जाता है और विनिर्देश स्पष्ट रूप से कहता है कि क्लाइंट और प्राधिकरण सर्वर "इस अनुदान प्रकार का उपयोग कम से कम करें और जब भी संभव हो अन्य अनुदान प्रकारों का उपयोग करें"।

ROPC को बेसिक ऑथेंटिकेशन पर इस्तेमाल करने के कई फायदे हैं, लेकिन इससे पहले कि हम इसमें आएँ, आइए OAuth2 और बेसिक ऑथेंटिकेशन के बीच बुनियादी प्रोटोकॉल अंतर को समझें। कृपया मुझे समझाएं क्योंकि मैं इन्हें समझाता हूं और बाद में ROPC में आऊंगा।

उपयोगकर्ता प्रमाणीकरण प्रवाह

OAuth2 विनिर्देश में चार भूमिकाएँ निर्धारित हैं। उदाहरण के साथ, वे हैं:

  1. संसाधन स्वामी: वह उपयोगकर्ता जिसके पास कुछ संसाधन तक पहुँच है, उदाहरण के लिए आपके मामले में, अलग-अलग उपयोगकर्ताओं के पास REST API तक अलग पहुँच स्तर हो सकता है;
  2. क्लाइंट: आमतौर पर उपयोगकर्ता द्वारा उपयोग किए जाने वाले एप्लिकेशन, और उपयोगकर्ता को सेवाएं प्रदान करने के लिए संसाधन तक पहुंच की आवश्यकता होती है;
  3. संसाधन सर्वर: आपके मामले में बाकी एपीआई; तथा
  4. प्राधिकरण सर्वर: वह सर्वर, जिसके लिए उपयोगकर्ता की साख प्रस्तुत की जाती है और जो उपयोगकर्ता को प्रमाणित करेगा।

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

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

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

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

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

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

टोकन जारी करना

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

OAuth2 का एक और पहलू है जो कि टोकन जारी करने में कैसे फंसाया जाता है और वे काम करते हैं। जब कोई उपयोगकर्ता प्राधिकरण सर्वर (ROPC में भी) को क्रेडेंशियल प्रस्तुत करता है, तो प्राधिकरण सर्वर टोकन के दो प्रकारों में से एक या अधिक दे सकता है: 1) एक्सेस टोकन, और 2) रीफ्रेश टोकन।

एक्सेस टोकन संसाधन सर्वर को भेजे जाते हैं जो इसे सत्यापित करने के बाद संसाधनों तक पहुंच प्रदान करेंगे, और आमतौर पर उनके पास एक छोटा जीवनकाल होता है, जैसे कि 1.hr। रिफ्रेश टोकन क्लाइंट द्वारा प्राधिकरण सर्वर को भेजे जाते हैं जब यह समाप्त हो जाता है, तो एक और एक्सेस टोकन प्राप्त करने के लिए, और आमतौर पर एक बड़ा जीवनकाल होता है (उदाहरण के लिए कुछ दिनों से महीनों या वर्षों तक)।

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

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

JWT केवल टोकन प्रारूप है जो आमतौर पर OAuth2 और OpenID कनेक्ट के साथ उपयोग किया जाता है। टोकन पर हस्ताक्षर करने और इसे मान्य करने के तरीकों को भी उन पुस्तकालयों के साथ मानकीकृत किया गया है जो हर संसाधन सर्वर के बजाय अभी तक किसी अन्य समाधान को लागू करने के लिए उपलब्ध हैं। इस प्रकार, लाभ कोड के पुन: प्रयोज्य में निहित है जिसे वीटो कर दिया गया है और इसका समर्थन जारी है।

सुरक्षा निहितार्थ

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

OAuth2 का अंतिम प्रमुख लाभ यह है कि प्रोटोकॉल मानकीकृत है और कई प्राधिकरण सर्वर, क्लाइंट और संसाधन सर्वर इसका सम्मान करते हैं। डेवलपर्स के लिए कई पुस्तकालय उपलब्ध हैं, जिन्हें रखरखाव में सुरक्षा के मुद्दों के रूप में बनाए रखा जाता है, पुस्तकालयों को इंटरऑपरेबिलिटी की अनुमति देते समय अपडेट किया जाता है।

निष्कर्ष

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

ध्यान दें कि मैंने आपकी टिप्पणी को संबोधित नहीं किया था कि तार पर क्रेडेंशियल्स कैसे भेजे जाते हैं क्योंकि उन्हें टीएलएस या इसी तरह के प्रोटोकॉल का उपयोग करके सुरक्षित किया जा सकता है, या कब्जे का प्रमाण आदि। जैसा कि किसी ने पहले ही सुझाव दिया है, आधार 64 एन्कोडिंग 0 सुरक्षा है, कृपया नहीं उस से बहक जाना। ऊपर बताए गए अंतर आमतौर पर वास्तुकला के स्तर पर हैं और इस तरह से मैंने ध्यान केंद्रित किया है क्योंकि वास्तुकला एक बार लागू होने के बाद सबसे कठिन है।

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


एक विस्तृत कोण के लिए धन्यवाद, लेकिन मुझे नहीं लगता कि ये फायदे, (a) letting the user agent hold just the token instead of the password, (b) allowing a password change without disrupting existing client apps, (c) allowing users log out other sessionsविशिष्ट प्रमाणीकरण प्रवाह के लिए विशिष्ट हैं। न तो बेसिक और न ही टोकन प्रमाणीकरण में उनके स्पेक्स में फ़ंक्शन (बी) और (सी) का उल्लेख है। किसी भी तरह के प्रमाणीकरण के लिए कार्यान्वयन (बी) और (सी) संभव है। इसमें पासवर्ड का ट्रैक रखना (अधिमानतः उनका हैश) शामिल होगा। लाभ (ए) पासवर्ड के व्यापक दायरे पर निर्भर लगता है।
eel ghEEz

यदि उपयोगकर्ता (रिसोर्स ओनर) के पास किसी बाहरी प्राधिकरण सर्वर के साथ कोई क्रेडेंशियल्स नहीं है, लेकिन ग्राहक एप्लिकेशन में उसके क्रेडेंशियल्स हैं तो हम OAuth का उपयोग कैसे कर सकते हैं? हमारे पास रिसोर्स ओनर (उपयोगकर्ता), क्लाइंट (उपयोगकर्ता का प्रतिनिधित्व करना और उपयोगकर्ता के लिए क्रेडेंशियल्स भी शामिल है) और संसाधन सर्वर है। एक संसाधन सर्वर उपयोगकर्ता को कैसे प्रमाणित और अधिकृत कर सकता है?
अरुण अवनाथन

3

मेरा मानना ​​है कि आप URL में GET चर के आसपास एन्क्रिप्शन के बारे में गलत जानकारी दे रहे हैं

केवल वे लोग जो अनुरोध में GET चर देख सकते हैं वे मूल कंप्यूटर और प्राप्त सर्वर ( लिंक ) हैं।

केवल HTTPS अनुरोध को भेजे गए डोमेन के आधार पर DNS लुकअप को एन्क्रिप्ट नहीं किया जाता है। बाकी सब कुछ, पोर्ट, GET वैरिएबल, संसाधन ID, एन्क्रिप्ट किया गया है।

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


3

मूल प्रमाणीकरण आपके REST API को सुरक्षित करने का एक अच्छा तरीका नहीं है। मैंने इसके उत्तर में कारण बताए ।

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

आपका क्लाइंट प्राधिकरण सर्वर से टोकन कैसे प्राप्त करता है यह इस बात पर निर्भर करता है कि वह किस प्रकार का क्लाइंट है। याद रखें, जब आप क्लाइंट को प्राधिकरण सर्वर के साथ पंजीकृत करते हैं तो आपको अपने ग्राहक के प्रकार को निर्दिष्ट करने की आवश्यकता होती है।

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

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

यह सब इस बात पर निर्भर करता है कि आप किस तरह के ग्राहक का उपयोग कर रहे हैं।

अंत में, JWT टोकन को सत्यापित करने से प्राधिकरण सर्वर पर बात करने की आवश्यकता के बिना संसाधन सर्वर पर होता है। यह एक बेहतर स्केलेबल आर्किटेक्चर की ओर जाता है फिर समाधान जो प्रत्येक ग्राहक के लिए निजी डेटा को देखने की आवश्यकता होती है।


1

यह सुरक्षित है या सुरक्षित नहीं है। न आधिक न कम। Base64 होने से बेसिक प्रामाणिक (या कुछ भी) अधिक सुरक्षित नहीं होता है।

अगर यह Https जैसे एन्क्रिप्टेड पाइप का उपयोग कर रहा है तो कुछ भी अनएन्क्रिप्टेड भेजने में कुछ भी गलत नहीं है।

OAuth में अधिक विशेषताएं हैं, यदि आपको इसकी आवश्यकता है तो इसका उपयोग करें। और कुछ के लिए, उदाहरण के लिए, बुनियादी चुनौती-प्रतिक्रिया का उपयोग करना बैंकिंग ठीक है और सुरक्षित है।


0

मुझे लगता है कि आपको पहले शब्दावली को समझने की आवश्यकता है। आप तुलना कर रहे हैं- प्राधिकरण और डिजिटल हस्ताक्षर

ऑउथ ऑथराइजेशन के लिए खुला मानक है , जहां एमेजॉन क्या कर रहा है (आपके प्रश्न में दिए गए लेख और विवरण के अनुसार) एक वैध डिजिटल हस्ताक्षर बना रहा है जो प्राप्तकर्ता (यहां अमेज़ॅन) को यह विश्वास करने का कारण देता है कि संदेश किसी ज्ञात द्वारा बनाया गया था प्रेषक, यह कि प्रेषक संदेश भेजने से इनकार नहीं कर सकता ( प्रमाणीकरण और गैर-अस्वीकृति)

जिसके लिए प्राधिकरण तंत्र का उपयोग करना है, यह कम या ज्यादा आपके उपयोग-मामले पर निर्भर करता है।

नीचे StackOverflow पर क्या पाया जा सकता है :

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

और यहाँ एक और दिलचस्प लेख दोनों की तुलना है।

SSL पर बुनियादी प्रमाणीकरण वास्तव में काफी हद तक जिम्मेदार है, एक सरलीकृत सुरक्षा दृष्टिकोण से। जब हम उपयोगकर्ता नाम और पासवर्ड के साथ प्रतिस्पर्धा कर रहे हैं, तो मूल प्रचलित एक प्रचलित समाधान है क्योंकि इसे लागू करना इतना आसान है। क्रेडेंशियल का प्रसारण एसएसएल पर एन्क्रिप्ट किया गया है, और "प्राधिकरण" हेडर का उपयोग HTTP क्लाइंट और सिस्टम में सर्वव्यापी है।

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