JWT ताज़ा टोकन प्रवाह


129

मैं एक मोबाइल ऐप बना रहा हूं और प्रमाणीकरण के लिए JWT का उपयोग कर रहा हूं।

ऐसा लगता है कि ऐसा करने का सबसे अच्छा तरीका यह है कि JWT एक्सेस टोकन को रिफ्रेश टोकन के साथ जोड़ा जाए ताकि मैं एक्सेस टोकन को जितनी बार चाहें समाप्त कर सकूं।

  1. एक ताज़ा टोकन कैसा दिखता है? क्या यह एक यादृच्छिक स्ट्रिंग है? क्या वह तार एन्क्रिप्टेड है? क्या यह एक और जेडब्ल्यूटी है?
  2. ताज़ा टोकन डेटाबेस में एक्सेस के लिए उपयोगकर्ता मॉडल पर संग्रहीत किया जाएगा, सही? ऐसा लगता है कि इस मामले में इसे एन्क्रिप्ट किया जाना चाहिए
  3. क्या मैं एक उपयोगकर्ता लॉगिन के बाद ताज़ा टोकन वापस भेज दूंगा, और फिर क्या ग्राहक के पास एक्सेस टोकन प्राप्त करने के लिए एक अलग मार्ग है?

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

1
@jtmarmon: आप ग्राहक की ओर से ताज़ा टोकन कैसे संग्रहीत करते हैं? मेरा मतलब है सुरक्षा के साथ Android डिवाइस?
j10

जवाबों:


39

यह मानते हुए कि यह OAuth 2.0 के बारे में है क्योंकि यह JWTs और ताज़ा टोकन के बारे में है ...:

  1. एक पहुंच टोकन की तरह, सिद्धांत रूप में एक ताज़ा टोकन आपके द्वारा वर्णित सभी विकल्पों सहित कुछ भी हो सकता है; एक JWT का उपयोग तब किया जा सकता है जब प्राधिकरण सर्वर स्टेटलेस होना चाहता है या इसे पेश करने वाले क्लाइंट को किसी प्रकार के "प्रूफ-ऑफ-कब्जे" शब्दार्थ को लागू करना चाहता है; ध्यान दें कि एक ताज़ा टोकन एक पहुंच टोकन से भिन्न होता है, यह एक संसाधन सर्वर को प्रस्तुत नहीं किया जाता है, लेकिन केवल उस प्राधिकरण सर्वर को दिया जाता है जिसने इसे पहले स्थान पर जारी किया था, इसलिए JWTs-as-access-tokens के लिए स्व-निहित सत्यापन अनुकूलन करता है। ताज़ा टोकन के लिए नहीं

  2. डेटाबेस की सुरक्षा / पहुंच पर निर्भर करता है; यदि डेटाबेस को अन्य पार्टियों / सर्वरों / अनुप्रयोगों / उपयोगकर्ताओं द्वारा एक्सेस किया जा सकता है, तो हाँ (लेकिन आपका माइलेज एन्क्रिप्शन कुंजी को कहाँ और कैसे संग्रहीत करता है ...

  3. एक प्राधिकरण सर्वर एक ही समय में टोकन तक पहुँच और ताज़ा दोनों टोकन जारी कर सकता है, जो ग्राहक द्वारा उन्हें प्राप्त करने के लिए उपयोग किए जाने वाले अनुदान पर निर्भर करता है; प्रत्येक मानक अनुदान पर विवरण और विकल्प शामिल हैं


31
2. आपको अपने डेटाबेस में रिफ्रेश टोकन का हैश स्टोर करना चाहिए और फिर यूजर के रिफ्रेश टोकन के हैश की तुलना अपने स्टोर किए हुए हैश से करना चाहिए। "अपने डेटाबेस में सादा पाठ पासवर्ड संग्रहीत न करें" का नियम यहां पर है। एक यादृच्छिक पासवर्ड की तरह एक टोकन पर विचार करें जो आपने उपयोगकर्ता के लिए बनाया था।
रोमेर

2
इसके अलावा, यदि आप अधिक सुरक्षा प्रदान करना चाहते हैं, तो ताज़ा टोकन रोटेशन भी करें। इसका महत्व ITEF RFC 6749 में पहले ही उल्लेख किया गया है । यदि इसे सही तरीके से लागू किया जाता है, तो यह टोकन चोरी परिदृश्य की पहचान करने में भी मदद कर सकता है, अर्थात एक हमलावर द्वारा ताज़ा किया गया टोकन चोरी हो गया। यदि आप एक बेहतर स्पष्टीकरण की तलाश कर रहे हैं, तो इस लिंक पर जाएँ
Bhumil Sarvaiya

82

नीचे अपने JWT पहुँच टोकन को निरस्त करने के चरण दिए गए हैं:

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

कृपया मुझे बताएं कि यदि आपको अधिक जानकारी की आवश्यकता है, तो मैं कोड (जावा + स्प्रिंग बूट) भी साझा कर सकता हूं।

आपके सवालों के लिए:

Q1: यह एक और JWT है जिसमें लंबे समय के समाप्ति समय के साथ कम दावे हैं।

Q2: यह एक डेटाबेस में नहीं होगा। बैकएंड कहीं भी स्टोर नहीं होगा। वे सिर्फ निजी / सार्वजनिक कुंजी के साथ टोकन को डिक्रिप्ट करेंगे और इसे अपने समाप्ति समय के साथ भी मान्य करेंगे।

Q3: हाँ, सही है


28
मुझे लगता है कि JWT को स्टोर किया जाना चाहिए localStorageऔर refreshTokenएक में स्टोर किया जाना चाहिए httpOnlyrefreshToeknतो यह अतिरिक्त सावधानी के साथ संभाला जाना है एक नया जेडब्ल्यूटी प्राप्त करने के लिए इस्तेमाल किया जा सकता।
Tnc आंद्रेई

2
धन्यवाद क्या आप HTTPOnly में संग्रहीत करके क्या मतलब है? क्यों नहीं दोनों स्थानीयस्टोरेज में स्टोर करें?
जय

8
मैं ताज़ा टोकन का उपयोग करने के लाभों को याद नहीं कर रहा हूँ, पहुँच टोकन की वैधता को बढ़ाने के लिए समान नहीं होगा?
user2010955

3
@Jay Microsoft डेवलपर नेटवर्क के अनुसार, HttpOnly एक अतिरिक्त फ्लैग है जो सेट-कुकी HTTP प्रतिक्रिया हैडर में शामिल है। कुकी जनरेट करते समय HttpOnly ध्वज का उपयोग करने से क्लाइंट कुकी को संरक्षित कुकी तक पहुंचने में स्क्रिप्ट के जोखिम को कम करने में मदद मिलती है (यदि ब्राउज़र इसका समर्थन करता है)।
छाया ०३५

23
# 2 अत्यधिक त्रुटिपूर्ण है। एक ताज़ा टोकन सर्वर पर संग्रहीत किया जाना है। आपको ताज़ा टोकन के लिए JWT की "स्व-निहित" संपत्ति का लाभ नहीं उठाना चाहिए। ऐसा करने से आपकी निजी कुंजी को बदलने के अलावा अन्य ताज़ा टोकन को रद्द करने का कोई तरीका नहीं है।
जय शर्मा

26

ताज़ा टोकन के साथ JWT के Node.js के साथ इस कार्यान्वयन के आधार पर :

1) इस मामले में वे एक यूआईडी का उपयोग करते हैं और यह एक जेडब्ल्यूटी नहीं है। जब वे टोकन ताज़ा करते हैं तो वे ताज़ा टोकन और उपयोगकर्ता भेजते हैं। यदि आप इसे JWT के रूप में लागू करते हैं, तो आपको उपयोगकर्ता को भेजने की आवश्यकता नहीं है, क्योंकि यह JWT के अंदर होगा।

2) वे इसे एक अलग दस्तावेज़ (तालिका) में लागू करते हैं। यह मेरे लिए समझ में आता है क्योंकि एक उपयोगकर्ता को विभिन्न क्लाइंट एप्लिकेशन में लॉग इन किया जा सकता है और इसमें ऐप द्वारा एक ताज़ा टोकन हो सकता है। यदि उपयोगकर्ता एक ऐप इंस्टॉल किए गए डिवाइस को खो देता है, तो उस डिवाइस के ताज़ा टोकन को अन्य लॉग इन डिवाइस को प्रभावित किए बिना अमान्य किया जा सकता है।

3) इस कार्यान्वयन में यह दोनों के साथ विधि में लॉग का जवाब देता है, टोकन का उपयोग और ताज़ा टोकन। यह मेरे लिए सही है।


"1) कहकर इस मामले में वे यूआईडी का उपयोग करते हैं ..." क्या आपका मतलब यूयूआईडी था?
ozanmuyes

इस सरल कार्यान्वयन के बारे में क्या है - इश्यू JWT - जब आप रिफ्रेश करना चाहते हैं तो पुराने JWT को भेजें - (आप iatविंडो के साथ जांच कर सकते हैं) - पिछले एक के आधार पर एक नया एक फिर से करें
adonese

@ केवल JWTआपके refresh_tokenअंदर भेजने से मतलब है कि आपके अंदर क्या है? यदि ऐसा है, तो OAuth RFC 6749 स्पष्ट रूप refresh_tokenसे संसाधन सर्वर को भेजने के लिए नहीं कहता है (और संसाधन सर्वर JWTपर भेजा जाता है): tools.ietf.org/html/rfc6749#section-1.5
ब्रेनो कोस्टा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.