OAuth v2 में टोकन तक पहुँच और परिशोधन दोनों क्यों हैं?


654

ड्राफ्ट OAuth 2.0 प्रोटोकॉल की धारा 4.2 इंगित करती है कि एक प्राधिकरण सर्वर दोनों access_token(जो एक संसाधन के साथ स्वयं को प्रमाणित करने के लिए उपयोग किया जाता है) और साथ ही एक refresh_token, जिसे एक नया बनाने के लिए शुद्ध रूप से उपयोग किया जाता है, वापस कर सकता है access_token:

https://tools.ietf.org/html/rfc6749#section-4.2

क्यों है दोनों? क्यों नहीं बस के access_tokenरूप में लंबे समय के रूप में पिछले बनाने refresh_tokenऔर एक है refresh_token?

जवाबों:


463

ताज़ा टोकन का विचार यह है कि अगर एक पहुंच टोकन से समझौता किया जाता है, क्योंकि यह अल्पकालिक है, तो हमलावर के पास एक सीमित खिड़की है जिसमें इसका दुरुपयोग करना है।

टोकन को रिफ्रेश करें, यदि समझौता किया जाता है, तो बेकार हैं क्योंकि एक्सेस टोकन प्राप्त करने के लिए हमलावर को रिफ्रेश टोकन के अलावा क्लाइंट आईडी और सीक्रेट की आवश्यकता होती है।

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

यह पाठ्यक्रम कार्यान्वयन के लिए अलग है जहां आप प्राधिकरण और संसाधन सर्वर दोनों को नियंत्रित नहीं करते हैं।

यहाँ एक अच्छा धागा ताज़ा टोकन के उपयोग के बारे में बात कर रहा है: OAuth अभिलेखागार

ऊपर से एक उद्धरण, ताज़ा टोकन के सुरक्षा उद्देश्यों के बारे में बात करते हुए:

टोकन रीफ़्रेश करें ... एक लंबे समय तक रहने वाले access_token के जोखिम को कम करता है (एक असुरक्षित संसाधन सर्वर पर लॉग फ़ाइल में क्वेरी परम, बीटा या खराब कोडित संसाधन सर्वर ऐप, गैर एसडीटी साइट पर JS SDK क्लाइंट, जो access_token को डालता है। कुकी, आदि)


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

54
"टोकन को रिफ्रेश करें, अगर समझौता किया जाता है, तो बेकार हैं क्योंकि एक्सेस टोकन हासिल करने के लिए हमलावर को रिफ्रेश टोकन के अलावा क्लाइंट आईडी और सीक्रेट की आवश्यकता होती है।" लेकिन क्लाइंट आईडी और सीक्रेट को भी डिवाइस में स्टोर किया जाता है, है ना? तो डिवाइस तक पहुंच के साथ एक हमलावर उन्हें मिल सकता है। तब क्यों? यहाँ, github.com/auth0/lock/wiki/Using-a-Refresh-Token , यह लिखा है कि एक रिफ्रेश टोकन खोने का मतलब है, वह जितने चाहें उतने मौखिक टोकन का अनुरोध कर सकता है, लेकिन गोगल्स परिदृश्य में नहीं हो सकता है, लेकिन क्या होगा यदि मैं अपने oauth2 सर्वर को लागू कर रहा हूं?
जमशेद कमरुद्दीन

42
"हमलावर को एक्सेस टोकन हासिल करने के लिए रिफ्रेश टोकन के अलावा क्लाइंट आईडी और सीक्रेट की आवश्यकता होती है" : फिर रिफ्रेश टोकन का उपयोग करने और बस इस्तीफा देने में क्या अंतर है?
8:00 बजे 8

34
ताज़ा टोकन का उपयोग तीसरे पक्ष द्वारा किया जा सकता है जो उपयोगकर्ता क्रेडेंशियल्स के किसी भी ज्ञान के बिना पहुंच टोकन को नवीनीकृत कर सकता है।
मारेक दिसम्बर

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

551

कैचडेव द्वारा प्रदान की गई चर्चा का लिंक, डिक हार्ड्ट द्वारा बनाया गया एक और वैध बिंदु (मूल, मृत लिंक) है, जो मुझे लगता है कि ऊपर लिखे गए शब्दों के अलावा यहां उल्लेख के लायक है:

सुरक्षा और निरसन के लिए ताज़ा टोकन का मेरा स्मरण था। <...>

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

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

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

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

लंबे समय तक रहने वाले टोकन के साथ सिस्टम कैसे काम करना चाहिए

सर्वर क्लाइंट को टोकन जारी करके स्कोप के पूर्व-निर्धारित सेट के भीतर उपयोगकर्ता के डेटा तक पहुंचने की अनुमति देता है। जैसा कि हम टोकन को फिर से रखना चाहते हैं, हमें डेटाबेस में टोकन को "फ्लैक्ड" सेट या अनसेट के साथ संग्रहीत करना चाहिए (अन्यथा, आप स्व-निहित टोकन के साथ ऐसा कैसे करेंगे?) डेटाबेस में अधिक से अधिक len(users) x len(registered clients) x len(scopes combination)रिकॉर्ड हो सकते हैं। । हर एपीआई अनुरोध को डेटाबेस को हिट करना चाहिए। हालाँकि O (1) में प्रदर्शन करने वाले ऐसे डेटाबेस से प्रश्न करना काफी तुच्छ है, लेकिन विफलता का एकल बिंदु सिस्टम की मापनीयता और प्रदर्शन पर नकारात्मक प्रभाव डाल सकता है।

लंबे समय तक ताज़ा टोकन और अल्पकालिक एक्सेस टोकन के साथ सिस्टम कैसे काम करना चाहिए

यहां हम दो कुंजी जारी करते हैं: डेटाबेस में संबंधित रिकॉर्ड के साथ यादृच्छिक ताज़ा टोकन, और समाप्ति टाइमस्टैम्प क्षेत्र के अन्य लोगों के साथ स्वयं-निहित एक्सेस टोकन पर हस्ताक्षर किए।

चूंकि पहुँच टोकन स्व-सम्‍मिलित है, हमें इसकी वैधता की जाँच करने के लिए डेटाबेस को हिट करने की आवश्‍यकता नहीं है। हमें केवल टोकन को डिकोड करना है और हस्ताक्षर और टाइमस्टैम्प को मान्य करना है।

बहरहाल, हमें अभी भी ताज़ा टोकन के डेटाबेस को रखना है, लेकिन इस डेटाबेस के अनुरोधों की संख्या को आमतौर पर एक्सेस टोकन के जीवन काल (लंबी उम्र, कम पहुंच दर) द्वारा परिभाषित किया जाता है।

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

समझौतों से

टोकन टोकन को आंशिक रूप से एक्सेस टोकन डेटाबेस के SPoF (सिंगल पॉइंट ऑफ़ फेल्योर) को खत्म कर दें, फिर भी उनमें कुछ स्पष्ट कमियां हैं।

  1. खिड़की"। घटनाओं के बीच एक समय सीमा "उपयोगकर्ता पहुंच को रद्द करता है" और "पहुंच निरस्त होने की गारंटी है"।

  2. क्लाइंट तर्क की जटिलता।

    बिना ताज़ा किए टोकन

    • पहुँच टोकन के साथ एपीआई अनुरोध भेजें
    • यदि पहुंच टोकन अमान्य है, तो विफल रहें और उपयोगकर्ता को फिर से प्रमाणित करने के लिए कहें

    ताज़ा टोकन के साथ

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

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


4
@RomannImankulov यदि मैं इसे सही तरीके से समझ लेता हूं कि हम टोकन को db में सहेज सकते हैं और उन्हें किसी भी समय हटा सकते हैं, तो हम पहुँच को रद्द करना चाहते हैं, इसलिए क्यों नहीं टोकन को स्वंय सहेजें?
कोसनकोव

30
@kosnkov मेरी पोस्ट का लघु संस्करण है, यदि आप डेटाबेस में एक्सेस टोकन बचाते हैं, तो आप अपने एपीआई के लिए हर अनुरोध पर डेटाबेस को हिट करते हैं (जो आपके विशेष मामले में समस्या हो सकती है या नहीं भी हो सकती है)। यदि आप ताज़ा टोकन सहेजते हैं और पहुँच टोकन "स्व-निहित" रखते हैं, तो आप डेटाबेस को केवल तभी हिट करते हैं जब क्लाइंट पहुँच टोकन को ताज़ा करने का निर्णय लेता है।
रोमन इमानकुलोव

5
व्यक्तिगत रूप से मुझे प्रदर्शन हासिल करने के लिए डेटाबेस से टकराने का यह तरीका पसंद नहीं है यदि यह सुरक्षा से समझौता करने जा रहा है (भले ही केवल खिड़की के समय के लिए)। किसी को एक access_token को तुरंत रद्द करने में सक्षम होना चाहिए यदि आवश्यक हो तो लगभग हमेशा हम संवेदनशील उपयोगकर्ता जानकारी के साथ काम कर रहे हैं (अन्यथा हम संभवतः पहली जगह में OAuth का उपयोग नहीं करेंगे)। मुझे आश्चर्य है कि फेसबुक और Google जैसी बड़ी कंपनियों का उपयोग कौन सा है।
टियागो

1
मुझे पूरी तरह से समझ नहीं आया कि हमें कुछ समय के लिए "विंडो ओपन" क्यों करनी पड़ती है। हम इस उपयोगकर्ता के लिए टोकन तक पहुँच स्वीकार नहीं करने के लिए सिर्फ संसाधन सर्वर को अनुरोध क्यों नहीं भेज सकते हैं? क्या मैं सही हूं कि जब आप टोकन को साइन इन करने के लिए ग्राहक गुप्त नहीं होते हैं तो आप टोकन व्यवहार को ताज़ा नहीं कर सकते हैं? इसलिए मूल रूप से आप cliemts उपकरणों के js, मोबाइल डेस्कटॉप ऐप्स आदि पर सॉफ्टवेयर से ताज़ा टोकन का उपयोग नहीं कर सकते
इगोर 8ordaš

1
@PSIXO संसाधन सर्वर में डेटाबेस और शायद एक स्थानीय कैश के अलावा कोई लगातार स्टोर नहीं है। इसलिए, अगर टोकन को निरस्त कर दिया जाता है तो एकमात्र तरीका यह है कि डेटाबेस को दबाकर रखा जाए, यही वह पूरी प्रक्रिया है जिससे बचने की कोशिश की जाती है। आपके 2 वें प्रश्न के अनुसार, आप सही नहीं हैं। यदि आपके पास एक ताज़ा टोकन है, तो आप नए एक्सेस टोकन का अनुरोध कर सकते हैं।
बर्नी

199

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

इस तरह एक परिदृश्य के बारे में सोचो। आप 3600 सेकंड के एक्सेस टोकन का उपयोगकर्ता जारी करते हैं और टोकन को एक दिन के रूप में ताज़ा करते हैं।

  1. उपयोगकर्ता एक अच्छा उपयोगकर्ता है, वह घर पर है और आपकी वेबसाइट पर खरीदारी और अपने iPhone पर खोज / बंद कर देता है। उसका IP पता नहीं बदलता है और आपके सर्वर पर बहुत कम लोड है। हर मिनट 3-5 पेज अनुरोध की तरह। जब एक्सेस टोकन पर उनका 3600 सेकंड खत्म हो जाता है, तो उन्हें रिफ्रेश टोकन के साथ एक नए की आवश्यकता होती है। हम, सर्वर साइड पर, उसकी गतिविधि के इतिहास और आईपी पते की जांच करते हैं, सोचते हैं कि वह एक मानव है और खुद व्यवहार करता है। हम उसे अपनी सेवा का उपयोग जारी रखने के लिए एक नया एक्सेस टोकन प्रदान करते हैं। उपयोगकर्ता को तब तक फिर से उपयोगकर्ता नाम / पासवर्ड दर्ज करने की आवश्यकता नहीं होगी, जब तक कि वह खुद को ताज़ा करने वाले टोकन के एक दिन के जीवन-काल तक नहीं पहुंच जाता।

  2. उपयोगकर्ता एक लापरवाह उपयोगकर्ता है। वह न्यूयॉर्क, यूएसए में रहता है और अपने वायरस प्रोग्राम को बंद कर दिया है और पोलैंड में एक हैकर द्वारा हैक कर लिया गया है । जब हैकर को एक्सेस टोकन और रिफ्रेश टोकन मिला, तो वह उपयोगकर्ता को प्रतिरूपण करने और हमारी सेवा का उपयोग करने का प्रयास करता है। लेकिन अल्पकालिक एक्सेस टोकन समाप्त होने के बाद, जब हैकर टोकन को रीफ्रेश करने की कोशिश करता है, हम, सर्वर पर, उपयोगकर्ता के व्यवहार के इतिहास में एक नाटकीय आईपी परिवर्तन पर ध्यान दिया है (हे, यह संयुक्त राज्य अमेरिका में लॉगिन करता है और अब पोलैंड में ताज़ा एक्सेस प्राप्त करता है। बस 3600 के बाद ???)। हम रिफ्रेश प्रक्रिया को समाप्त करते हैं, रिफ्रेश टोकन को अमान्य करते हैं और फिर से यूजरनेम / पासवर्ड दर्ज करने के लिए संकेत देते हैं।

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

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

एक अन्य शब्द यह है कि आप प्रत्येक आईपी पर कॉल करने वाले लोगों के मूल आईपी वॉच डॉग या किसी अन्य उपाय को लागू करके चोरी के टोकन / सेवा के दुरुपयोग के नियंत्रण को सीमित करने का प्रयास कर सकते हैं। लेकिन यह महंगा है क्योंकि आपको उपयोगकर्ता के बारे में रिकॉर्ड पढ़ना और लिखना होगा और आपके सर्वर की प्रतिक्रिया को धीमा कर देगा।


@Lalaguer क्या आपके पास उदाहरण के लिए कुछ और बढ़िया दाने वाली नीतियाँ हैं: जब उपयोगकर्ता का IP पता बदल जाए (जब मोबाइल फ़ोन WiFi से डिस्कनेक्ट हो जाए और 3G / 4G नेटवर्क से कनेक्ट हो) तो टोकन न लौटाएँ?
svlada

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

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

7
@ एवी चेरी - हाँ एक एक्सेस टोकन अल्पकालिक हो सकता है, और यह ताज़ा भी किया जा सकता है यदि उपयोगकर्ता अभी भी वैध माना जाता है। ऐसा करने के लिए एक ताज़ा टोकन की आवश्यकता नहीं होती है।
रिक जॉली

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

72

इनमें से किसी भी उत्तर का मूल कारण ताज़ा टोकन मौजूद नहीं है। जाहिर है, आप हमेशा अपने क्लाइंट क्रेडेंशियल्स को ऑरिजनल सर्वर पर भेजकर एक नया एक्सेस-टोकन / रिफ्रेश-टोकन पेयर प्राप्त कर सकते हैं - यह कि आप उन्हें पहली जगह में कैसे प्राप्त करते हैं।

इसलिए रिफ्रेश टोकन का एकमात्र उद्देश्य वायर पर भेजे जा रहे क्लाइंट क्रेडेंशियल के उपयोग को सीमित करने के लिए सीमित करना है। एक्सेस-टोकन का ttl जितना छोटा होगा, उतनी बार क्लाइंट क्रेडेंशियल्स का उपयोग एक नया एक्सेस-टोकन प्राप्त करने के लिए करना होगा, और इसलिए अधिक अवसर हमलावरों को क्लाइंट क्रेडेंशियल्स से समझौता करना होगा (हालांकि यह वैसे भी सुपर मुश्किल हो सकता है) असममित एन्क्रिप्शन का उपयोग उन्हें भेजने के लिए किया जा रहा है)। इसलिए यदि आपके पास एकल-उपयोग ताज़ा-टोकन है, तो आप क्लाइंट क्रेडेंशियल्स से समझौता किए बिना एक्सेस-टोकन के ttl को मनमाने ढंग से छोटा कर सकते हैं।


16
यह Google के मामले में दिलचस्प है जब आप ताज़ा टोकन मांगते हैं, तो आप क्लाइंट आईडी और क्लाइंट सीक्रेट भी भेजते हैं। तो आप वैसे भी हर घंटे समझौता कर रहे हैं।
रॉट

1
अलेक्जेंडर, वास्तव में टीटीएल जितना छोटा होता है, उतना ही अक्सर ग्राहक को एक नया एक्सेस-टोकन प्राप्त करना होगा (जिसे क्लाइंट क्रेडेंशियल्स का उपयोग करने की आवश्यकता होती है)। तो मैं वास्तव में वहाँ 'छोटे' का मतलब है। मैं स्पष्ट करने के लिए एक नोट जोड़ूंगा।
बीटी

2
"एकमात्र उद्देश्य" - धोता नहीं है। एक्सेस-टोकन के टीटीएल को तब तक बनाना जब तक कि कल्पित रिफ्रेश-टोकन केवल उसी को प्राप्त नहीं करेगा।
ररबबार

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

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

55

कुछ भ्रम को दूर करने के लिए आपको क्लाइंट सीक्रेट और यूजर पासवर्ड की भूमिकाओं को समझना होगा , जो बहुत अलग हैं।

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

प्रारंभिक पहुँच टोकन और ताज़ा टोकन प्राप्त करने के लिए, जो आवश्यक है:

  • उपयोगकर्ता आईडी
  • उपयोगकर्ता का पासवर्ड
  • ग्राहक आईडी
  • ग्राहक गुप्त

एक ताज़ा पहुँच टोकन प्राप्त करने के लिए हालांकि ग्राहक निम्नलिखित जानकारी का उपयोग करता है:

  • ग्राहक आईडी
  • ग्राहक गुप्त
  • ताज़ा टोकन

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

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


1
"इससे यह भी पता चलता है कि ताज़ा टोकन खोना कोई समस्या नहीं है क्योंकि क्लाइंट आईडी और रहस्य ज्ञात नहीं हैं"। लेकिन मुझे उनकी जरूरत नहीं है। अगर मुझे एक ताज़ा टोकन मिला है, तो मैं इसे आपके एप्लिकेशन सर्वर पर भेज सकता हूं। यह client_id और गुप्त जोड़ता है और फिर OAuth सेवा में तीनों को पास करता है। क्या बात है?
3DFace

7
एप्लिकेशन सर्वर अपने आप को एक ताज़ा टोकन प्रदान करने का एक तरीका प्रदान नहीं करता है, आप इसे एक ताज़ा टोकन देकर एक नया प्रमाणीकरण टोकन बनाने के लिए नहीं कह सकते। यह जरूरत पड़ने पर ऑर्टिकल टोकन को रिन्यू करता है, "पर्दे के पीछे"।
अडर्सुस २ Adv

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

@KevinChristopherHenry इस तरह का सुझाव देता है कि एक अंतिम उपयोगकर्ता के लिए कंपनी XYZ.com वेबसाइट पर लॉग इन करने पर एक ताज़ा टोकन XYZ.com के लिए एक नया एक्सेस टोकन प्राप्त करना अर्थहीन है? लेकिन एक ताज़ा टोकन किसी भी गैर-अनुमानी स्ट्रिंग हो सकता है - एक गाइड की तरह - एक तालिका में संग्रहीत किया जाता है जिसे बहुत तेज़ी से देखा जा सकता है। जबकि किसी डेटाबेस में अनुक्रमणिका के लिए एक पहुंच टोकन बहुत लंबा और कठिन हो सकता है। इसलिए ताज़ा टोकन को संग्रहीत किया जा सकता है और अंतिम उपयोगकर्ता पक्ष पर लाभ हो सकता है। [हालांकि यह सवाल oauth2 के बारे में बात करता है, शायद किसी तीसरे पक्ष की सेवा के बिना कोई जवाब जो किसी व्यक्ति की ओर से कार्य करता है वैसे भी प्रासंगिक नहीं हैं]
सिमोन_विएवर

आप केवल नई पहुंच टोकन प्राप्त करने के लिए 'ग्राहक आईडी' + 'ग्राहक गुप्त' + 'पहुंच टोकन' पास क्यों नहीं कर सकते?
हनी

37

यह उत्तर जस्टिन रिचर से OAuth 2 मानक बॉडी ईमेल सूची के माध्यम से है। यह उसकी अनुमति के साथ पोस्ट किया गया है।


एक ताज़ा टोकन का जीवनकाल (एएस) प्राधिकरण सर्वर तक होता है - वे समाप्त हो सकते हैं, निरस्त किए जा सकते हैं, आदि ताज़ा ताज़ा और पहुँच टोकन के बीच का अंतर दर्शकों का है: ताज़ा टोकन केवल प्राधिकरण सर्वर पर वापस जाता है पहुँच टोकन (RS) संसाधन सर्वर पर जाता है।

इसके अलावा, बस एक एक्सेस टोकन प्राप्त करने का मतलब यह नहीं है कि उपयोगकर्ता लॉग इन है। वास्तव में, उपयोगकर्ता अब भी नहीं हो सकता है, जो वास्तव में ताज़ा टोकन का इरादा उपयोग मामला है। एक्सेस टोकन रीफ़्रेश करने से आपको उपयोगकर्ता की ओर से API तक पहुँच प्राप्त होगी, यह आपको यह नहीं बताएगा कि उपयोगकर्ता वहाँ है या नहीं।

OpenID कनेक्ट न केवल आपको एक्सेस टोकन से उपयोगकर्ता की जानकारी देता है, यह आपको एक आईडी टोकन भी देता है। यह डेटा का एक अलग टुकड़ा है जो क्लाइंट पर ही निर्देशित किया जाता है, एएस या आरएस पर नहीं। OIDC में, आपको केवल किसी व्यक्ति को प्रोटोकॉल द्वारा "लॉग इन" पर विचार करना चाहिए यदि आप एक ताज़ा आईडी टोकन प्राप्त कर सकते हैं। इसे ताज़ा करने के लिए पर्याप्त होने की संभावना नहीं है।

अधिक जानकारी के लिए कृपया पढ़ें http://oauth.net/articles/authentication/


यह OpenID कनेक्ट और प्रमाणीकरण के बारे में प्रतीत होता है, इसलिए मैं यह नहीं देखता कि यह प्रश्न का उत्तर कैसे देता है, जो टोकन ताज़ा करने की प्रेरणा के बारे में है।
sleske

18

ग्राहकों से कई तरह से समझौता किया जा सकता है। उदाहरण के लिए एक सेल फोन क्लोन किया जा सकता है। एक्सेस टोकन समाप्त होने का मतलब है कि क्लाइंट को प्राधिकरण सर्वर पर फिर से प्रमाणित करने के लिए मजबूर किया गया है। पुन: प्रमाणीकरण के दौरान, प्राधिकरण सर्वर अन्य विशेषताओं (IOW प्रदर्शन अनुकूली पहुंच प्रबंधन) की जांच कर सकता है।

रिफ्रेश टोकन एक क्लाइंट के लिए केवल री-ऑथेंटिकेशन की अनुमति देते हैं, जहां री-ऑथराइज उस उपयोगकर्ता के साथ एक संवाद को बाध्य करता है जो कई ने संकेत दिया है कि वे ऐसा नहीं करेंगे।

ताज़ा टोकन अनिवार्य रूप से उसी स्थान पर फिट होते हैं जहाँ सामान्य वेब साइटें एक या एक घंटे के बाद समय-समय पर उपयोगकर्ताओं को फिर से प्रमाणित कर सकती हैं (जैसे बैंकिंग साइट)। वर्तमान में इसका अत्यधिक उपयोग नहीं किया जाता है क्योंकि अधिकांश सामाजिक वेब साइटें वेब उपयोगकर्ताओं को पुन: प्रमाणित नहीं करती हैं, इसलिए वे किसी ग्राहक को फिर से प्रमाणित क्यों करेंगे?


2
"रिफ्रेश टोकन एक क्लाइंट के लिए केवल पुन: प्रमाणीकरण की अनुमति देते हैं ..." यहां एक महत्वपूर्ण पहलू है।
जेम्स

13

क्यों न केवल access_token को तब तक बनाया जाए, जब तक कि ताज़ा_टोकन हो और एक ताज़ा_टोकन न हो?

महान जवाब के अलावा अन्य लोगों ने प्रदान किया है एक और कारण है कि ताज़ा टोकन और दावों के साथ क्या करना है।

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

यदि हम टोकन को अधिक बार ताज़ा करते हैं तो हम स्पष्ट रूप से अपनी पहचान सेवाओं पर अधिक दबाव डाल रहे हैं, लेकिन हम अधिक सटीक और अद्यतित दावे प्राप्त कर रहे हैं।


4
इस तरह के "दावों" को टोकन में डालने के लिए एक असामान्य बुरा अभ्यास होगा। जैसा कि विनिर्देश में वर्णित है , एक्सेस टोकन "आमतौर पर क्लाइंट के लिए अपारदर्शी है"। क्या आपके पास OAuth प्रदाताओं के उदाहरण हैं जो ऐसा करते हैं?
केविन क्रिस्टोफर हेनरी

3
@heymega जब उपयोगकर्ता की भूमिका ADMIN से REGULAR_USER की अपेक्षा से डाउनग्रेड की जाती है, तो उपयोगकर्ता की भूमिका को तुरंत रद्द करने की आवश्यकता होती है, जब Access_token की समय सीमा समाप्त होती है। तो, ऐसा लगता है कि प्रत्येक अनुरोध पर डेटाबेस को मारना अपरिहार्य है।
svlada

@svlada मुझे लगता है कि ऐसा मामला होगा जहां ADMIN से REGULAR_USER तक एक इकाई को अपग्रेड करने का आवेदन (उसी प्रक्रिया में) भी उचित टोकन को रद्द करने की आवश्यकता होगी। यदि हम जानते हैं कि दावे बदलने वाले हैं, तो हम समाप्ति की प्रतीक्षा नहीं करते हैं, हम तुरंत निरस्त कर देते हैं
e_i_pi

13

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

आप एक पहुंच टोकन को केवल एक ताज़ा टोकन नहीं रोक सकते।


1
आप एक एक्सेस टोकन को रद्द कर सकते हैं, जिसे किसी अन्य एक्सेस टोकन के लिए फिर से लॉग इन करना होगा या किसी अन्य एक्सेस टोकन को प्राप्त करने के लिए रिफ्रेश टोकन का उपयोग करना होगा। यदि ताज़ा टोकन अमान्य था, तो उपयोगकर्ता को नए ताज़ा टोकन के साथ नया एक्सेस टोकन प्राप्त करने के लिए फिर से प्रमाणित करना होगा।
19

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

1
यह कहते हुए कि आप कुछ टोकन को अनदेखा करने के लिए कस्टम कोड नहीं लिख सकते हैं (जैसे यहां stackoverflow.com/questions/22708046/… ), लेकिन ऐसा करने से संभवत: संसाधन सर्वर से oauth सर्वर तक कुछ नेटवर्क यात्राएं शामिल होती हैं / क्लाइंट हर बार db करता है। एक कॉल। आप इसके बजाय ताज़ा टोकन का उपयोग करके उन कॉल से बचते हैं, और मुझे लगता है कि ओउथ लेखकों का इरादा इसके अनुरूप अधिक है।
बिटकॉइनर

13

यह उत्तर दो वरिष्ठ देवों (जॉन ब्रेटन और डेविड जेनस) की मदद से एक साथ रखा गया है।

एक ताज़ा टोकन का उपयोग करने का मुख्य कारण हमले की सतह को कम करना है।

मान लीजिए कि कोई ताज़ा कुंजी नहीं है और आइए इस उदाहरण के माध्यम से चलते हैं:

एक इमारत में 80 दरवाजे हैं। सभी दरवाजे एक ही कुंजी से खोले जाते हैं। हर 30 मिनट में चाबी बदल जाती है। 30 मिनट के अंत में मुझे कीमेकर को पुरानी चाबी देनी है और एक नई चाबी प्राप्त करनी है।

यदि मैं हैकर हूं और आपकी कुंजी प्राप्त करता हूं, तो 30 मिनट के अंत में, मैं उस कीमर को कूरियर कर दूंगा और एक नई कुंजी प्राप्त करूंगा। मैं चाबी बदलने की परवाह किए बिना सभी दरवाजे लगातार खोल पाऊंगा ।

प्रश्न: 30 मिनट के दौरान, मेरे पास कुंजी के कितने हैकिंग अवसर थे? मेरे पास 80 हैकिंग के अवसर थे, हर बार जब आप कुंजी का उपयोग करते थे (इस बारे में सोचें कि नेटवर्क अनुरोध करना और अपनी पहचान करने के लिए एक्सेस टोकन पास करना)। तो यह 80X हमले की सतह है।

अब हम उसी उदाहरण से गुजरते हैं लेकिन इस बार मान लेते हैं कि एक ताज़ा कुंजी है।

एक इमारत में 80 दरवाजे हैं। सभी दरवाजे एक ही कुंजी से खोले जाते हैं। हर 30 मिनट में चाबी बदल जाती है। नई कुंजी प्राप्त करने के लिए, मैं पुराने एक्सेस टोकन को पास नहीं कर सकता। मुझे केवल रिफ्रेश की पास करनी होगी।

यदि मैं हैकर हूं और आपकी कुंजी प्राप्त करता हूं, तो मैं इसे 30 मिनट के लिए उपयोग कर सकता हूं, लेकिन 30 मिनट के अंत में इसे कीमेकर को भेजने का कोई मूल्य नहीं है। अगर मैं करता हूं, तो कीमेकर सिर्फ इस खराब ताज़ा टोकन को कहेंगे। अपने हैक को बढ़ाने में सक्षम होने के लिए मुझे कोरमेकर को कूरियर हैक करना होगा। कूरियर में एक अलग कुंजी है (इसे ताज़ा टोकन के रूप में सोचें)।

प्रश्न: 30 मिनट के दौरान, मेरे पास रिफ्रेश कुंजी के कितने हैकिंग अवसर थे? 80? नहीं, मेरे पास केवल 1 हैकिंग का अवसर था। समय के दौरान कूरियर कीमेकर के साथ संचार करता है। तो यह 1X हमला सतह है। मेरे पास कुंजी के खिलाफ 80 हैकिंग के अवसर थे, लेकिन वे 30 मिनट के बाद अच्छे नहीं थे।


एक सर्वर एक JWT (और आमतौर पर) के क्रेडेंशियल और हस्ताक्षर के आधार पर एक एक्सेस टोकन को सत्यापित करेगा।

एक एक्सेस टोकन लीक करना बुरा है, लेकिन एक बार यह समाप्त हो जाता है तो यह किसी हमलावर के लिए उपयोगी नहीं होता है। एक ताज़ा टोकन लीक करना कहीं अधिक बदतर है, लेकिन संभवतः इसकी संभावना कम है। (मुझे लगता है कि यह सवाल करने के लिए जगह है कि क्या एक ताज़ा लीक लीक होने की संभावना एक एक्सेस लीक की तुलना में बहुत कम है, लेकिन यह विचार है।)

बिंदु यह है कि आपके द्वारा किए गए प्रत्येक अनुरोध में एक्सेस टोकन जोड़ा जाता है, जबकि एक ताज़ा टोकन केवल ताज़ा प्रवाह के दौरान उपयोग किया जाता है इसलिए टोकन को देखने वाले एक MITM की कम संभावना

आवृत्ति एक हमलावर की मदद करती है। Heartbleedएसएसएल में जैसी संभावित सुरक्षा खामियां, क्लाइंट में संभावित सुरक्षा खामियां और सर्वर में संभावित सुरक्षा खामियां सभी संभव रिसाव करते हैं।

इसके अलावा, यदि प्राधिकरण सर्वर एप्लिकेशन सर्वर से अन्य क्लाइंट अनुरोधों को संसाधित करने से अलग है, तो वह एप्लिकेशन सर्वर कभी भी ताज़ा टोकन नहीं देखेगा। यह केवल एक्सेस टोकन को देखेगा जो अधिक समय तक नहीं रहेगा।

कंपार्टमेंटलाइजेशन सुरक्षा के लिए अच्छा है।

अंतिम लेकिन कम से कम इस भयानक उत्तर को न देखें


क्या ताज़ा टोकन के बारे में नहीं है?

ताज़ा टोकन के माध्यम से एक्सेस स्तर को अपडेट / निरस्त करने की क्षमता ताज़ा टोकन का उपयोग करने के लिए चुनने का एक प्रतिफल है, अन्यथा एक स्टैंडअलोन एक्सेस टोकन को रद्द किया जा सकता है या इसकी समाप्ति स्तर संशोधित हो सकता है जब यह समाप्त हो जाता है और उपयोगकर्ताओं को एक नया टोकन मिलता है


2
सवालों के अलग-अलग होने के बाद से इस तुलना का पालन करना कठिन है। "30 मिनट के दौरान, कुंजी के खिलाफ मेरे पास कितने हैकिंग के अवसर थे?" (क्या मेरे पास पहले हैकर के रूप में कुंजी नहीं थी?) 2. "30 मिनट के दौरान, मैंने कूरियर के खिलाफ कितने हैकिंग के अवसर प्राप्त किए?"। एक "हैकिंग अवसर" क्या होगा? एक हैकर के रूप में, क्या मेरे पास पहली जगह नहीं है?
Cesc 12

1
आप सही हे। मैंने बदलाव किए
हनी

4

मान लीजिए आप बनाते हैं access_token पिछले बहुत लंबे हैं, और नहीं है refresh_token, तो एक दिन में, हैकर यह मिलता हैaccess_token और वह सभी संरक्षित संसाधनों का उपयोग कर सकता है!

लेकिन अगर आपके पास है refresh_token, तो access_tokenलाइव समय कम है, इसलिए हैकर को आपका हैक करना मुश्किल है access_tokenक्योंकि यह थोड़े समय के बाद अमान्य हो जाएगा। Access_tokenकेवल न केवल का उपयोग करके वापस प्राप्त किए जा सकें refresh_token, लेकिन यह भी द्वारा client_idऔर client_secretहै, जो हैकर नहीं है।


2
"न केवल रिफ्रेश_टोकन का उपयोग करके, बल्कि क्लाइंट_आईडी और क्लाइंट_सेक्रेट द्वारा भी, जो हैकर के पास नहीं है।" 1. मान लें कि यह केवल एक्सेस टोकन है, तो हैकर को अभी भी client_id और client_secret की आवश्यकता नहीं है? 2. यदि कोई हैकर एक अच्छा हैकर है तो वह client_id और client_secret को भी हैक कर सकता है। उस भाग के बावजूद, अतिरिक्त चीजों को हैक करना तुलना के लिए महत्वपूर्ण नहीं होना चाहिए, क्योंकि अगर हैक करना मुश्किल है, तो केवल एक्सेस टोकन का उपयोग करने के मामले में हैक करना भी मुश्किल है ... लंबी कहानी संक्षेप में, आप समान स्थितियों की तुलना नहीं कर रहे हैं। आप उन्हें मिक्स कर रहे हैं
हनी

2

जबकि ताज़ा टोकन प्राधिकरण सर्वर द्वारा बनाए रखा जाता है। एक्सेस टोकन स्व-निहित है इसलिए संसाधन सर्वर इसे संग्रहीत किए बिना सत्यापित कर सकता है जो सत्यापन के मामले में पुनर्प्राप्ति के प्रयास को बचाता है। चर्चा में एक और बिंदु rfc6749 # पृष्ठ -55 से है

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

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


मैं भी लगता है कि यह एक बहुत ही महत्वपूर्ण बात यह है :-) यह - कुछ हद तक - तर्क यहाँ अमान्य कर देता है की तरह auth0.com/docs/tokens/refresh-token/current#restrictions किA Single-Page Application (normally implementing Single-Page Login Flow) should not under any circumstances get a Refresh Token. The reason for that is the sensitivity of this piece of information. You can think of it as user credentials, since a Refresh Token allows a user to remain authenticated essentially forever. Therefore you cannot have this information in a browser, it must be stored securely.
Simon_Weaver

1

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

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

दूसरे शब्दों में, हम ताज़ा टोकन का उपयोग करके टोकन के उपयोग की घटना तक पहुंच टोकन का उपयोग करके प्रत्येक एपीआई कॉल से महंगे संचालन को स्थानांतरित कर सकते हैं।


0

सबसे पहले, क्लाइंट प्राधिकरण सर्वर को प्राधिकरण अनुदान देकर प्रमाणित करता है।

फिर, क्लाइंट एक्सेस टोकन देकर संरक्षित संसाधन के लिए संसाधन सर्वर का अनुरोध करता है।

संसाधन सर्वर पहुँच टोकन को मान्य करता है और संरक्षित संसाधन प्रदान करता है।

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

यदि पहुँच की समय सीमा समाप्त हो जाती है, तो क्लाइंट अधिकृत सर्वर के साथ प्रमाणित होता है और ताज़ा टोकन प्रदान करके एक नए पहुँच टोकन के लिए अनुरोध करता है। यदि पहुँच टोकन अमान्य है, तो संसाधन सर्वर क्लाइंट को अमान्य टोकन त्रुटि प्रतिक्रिया भेजता है।

ग्राहक ताज़ा टोकन प्रदान करके प्राधिकरण सर्वर के साथ प्रमाणित करता है।

प्राधिकरण सर्वर तब क्लाइंट को प्रमाणित करके रिफ्रेश टोकन को मान्य करता है और यदि यह मान्य है तो एक नया एक्सेस टोकन जारी करता है।


यह वास्तव में उल्लेख नहीं करता है कि ताज़ा टोकन कहाँ से उत्पन्न होता है। मुझे लगता है कि दूसरे पैराग्राफ को कहना चाहिए access token + refresh token?
साइमन_वेर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.