प्रमाणीकरण जैसी स्थितियों में सत्रों पर JWTs का उपयोग करने का क्या फायदा है?
क्या इसे स्टैंडअलोन दृष्टिकोण के रूप में उपयोग किया जाता है या सत्र में इसका उपयोग किया जाता है?
प्रमाणीकरण जैसी स्थितियों में सत्रों पर JWTs का उपयोग करने का क्या फायदा है?
क्या इसे स्टैंडअलोन दृष्टिकोण के रूप में उपयोग किया जाता है या सत्र में इसका उपयोग किया जाता है?
जवाबों:
JWT के अनुसार "सत्र" का उपयोग करने पर कोई लाभ नहीं है। JWTs क्लाइंट पर सेशन स्टेट को बनाए रखने का एक साधन प्रदान करता है।
यह पूछने पर कि अक्सर लोगों का क्या मतलब है " सर्वर-साइड सत्रों का उपयोग करने पर JWTs का उपयोग करने के क्या लाभ हैं "
सर्वर-साइड सत्रों के साथ आपको या तो सत्र पहचानकर्ता को डेटाबेस में संग्रहीत करना होगा, या फिर इसे मेमोरी में रखें और सुनिश्चित करें कि क्लाइंट हमेशा एक ही सर्वर को हिट करता है। इन दोनों में कमियां हैं। डेटाबेस (या अन्य केंद्रीकृत भंडारण) के मामले में, यह एक अड़चन बन जाता है और बनाए रखने के लिए एक चीज बन जाती है - अनिवार्य रूप से हर अनुरोध के साथ किया जाने वाला एक अतिरिक्त प्रश्न।
इन-मेमोरी समाधान के साथ आप अपने क्षैतिज स्केलिंग को सीमित करते हैं, और सत्र नेटवर्क के मुद्दों (वाईफ़ाई और मोबाइल डेटा, सर्वर रिबूटिंग, आदि के बीच घूमने वाले ग्राहकों) से प्रभावित होंगे।
सत्र को क्लाइंट में ले जाने का मतलब है कि आप सर्वर-साइड सत्र पर निर्भरता को हटाते हैं, लेकिन यह चुनौतियों का अपना सेट लगाता है।
ये मुद्दे JWTs और अन्य क्लाइंट-साइड सत्र तंत्रों द्वारा समान रूप से साझा किए गए हैं।
JWT विशेष रूप से इनमें से अंतिम को संबोधित करता है। यह समझने में मदद कर सकता है कि JWT क्या है:
यह थोड़ी जानकारी है। उपयोगकर्ता सत्रों के लिए आप उपयोगकर्ता नाम और उस समय को शामिल कर सकते हैं जब टोकन समाप्त हो जाता है। लेकिन यह निश्चित रूप से कुछ भी हो सकता है, यहां तक कि सत्र आईडी या उपयोगकर्ता की पूरी प्रोफ़ाइल भी। (कृपया ऐसा न करें) लेकिन इसे एक सुरक्षित हस्ताक्षर मिल गया है जो दुर्भावनापूर्ण पार्टियों को नकली टोकन बनाने से रोकता है (आपको उन पर हस्ताक्षर करने के लिए सर्वर की निजी कुंजी तक पहुंच की आवश्यकता है और आप सत्यापित कर सकते हैं कि वे हस्ताक्षर किए जाने के बाद संशोधित नहीं हुए थे) उन्हें हर अनुरोध के साथ भेजें, जैसे कुकी या Authorization
हैडर को भेजा जाएगा। वास्तव में वे आमतौर पर HTTP Authorization
हेडर में भेजे जाते हैं लेकिन कुकी का उपयोग करना ठीक है।
टोकन पर हस्ताक्षर किए गए हैं और इसलिए सर्वर इसकी उत्पत्ति को सत्यापित कर सकता है। हम मान लेंगे कि सर्वर सुरक्षित रूप से साइन करने की अपनी क्षमता पर भरोसा करता है (आपको एक मानक पुस्तकालय का उपयोग करना चाहिए: इसे स्वयं करने की कोशिश न करें, और सर्वर को ठीक से सुरक्षित करें)
उत्तर टोकन को सुरक्षित रूप से ले जाने के साथ इस मुद्दे पर आमतौर पर एक एन्क्रिप्टेड चैनल, आमतौर पर httpS के माध्यम से भेजा जाता है।
क्लाइंट में टोकन को सुरक्षित रूप से संग्रहीत करने के बारे में, आपको यह सुनिश्चित करने की आवश्यकता है कि बुरे लोग इसे प्राप्त नहीं कर सकते। यह (अधिकतर) जेएस को खराब वेब साइटों को टोकन को पढ़ने से रोकने के लिए उन्हें वापस भेजने से रोकता है। यह उसी प्रकार की रणनीतियों का उपयोग करके कम किया जाता है जो अन्य प्रकार के XSS हमलों को कम करने के लिए उपयोग किया जाता है।
यदि आपको JWT को अमान्य करने की आवश्यकता है, तो निश्चित रूप से ऐसे तरीके हैं जिनसे इसे प्राप्त किया जा सकता है। केवल उन उपयोगकर्ताओं के लिए प्रति-उपयोगकर्ता युग को संग्रहीत करना, जिन्होंने अपने "अन्य सत्रों को समाप्त करने" का अनुरोध किया है, यह एक बहुत ही कुशल तरीका है जो संभवतः काफी अच्छा होगा। यदि किसी एप्लिकेशन को प्रति-सत्र अमान्यकरण की आवश्यकता है, तो एक सत्र आईडी उसी तरह से बनाए रखा जा सकता है और "मारे गए टोकन" तालिका को अभी भी पूर्ण उपयोगकर्ता तालिका से बहुत छोटा रखा जा सकता है (आपको केवल रिकॉर्ड को नए से बनाए रखने की आवश्यकता है सबसे लंबे समय तक टोकन जीवनकाल की अनुमति दी।) इसलिए टोकन को अमान्य करने की क्षमता आंशिक रूप से क्लाइंट-साइड सत्रों के लाभ को नकारती है, जिसमें आपको इस सत्र में मारे गए राज्य को बनाए रखना होगा। यह मूल सत्र राज्य तालिका की तुलना में संभवतः अधिक छोटी तालिका होगी, इसलिए लुकअप अभी भी अधिक कुशल हैं।
JWT टोकन का उपयोग करने का एक अन्य लाभ यह है कि यह संभवत: उपलब्ध पुस्तकालयों का उपयोग करके कार्यान्वित करना आसान है, शायद हर भाषा जो आप इसे करने की उम्मीद कर सकते हैं। यह आपकी प्रारंभिक उपयोगकर्ता प्रमाणीकरण योजना से पूरी तरह से तलाकशुदा है - यदि आप एक फिंगर प्रिंट आधारित प्रणाली में चले जाते हैं, तो आपको सत्र प्रबंधन योजना में कोई बदलाव करने की आवश्यकता नहीं है।
एक और अधिक सूक्ष्म लाभ: क्योंकि JWT "सूचना" ले सकता है और इसे क्लाइंट द्वारा एक्सेस किया जा सकता है जिसे आप अब कुछ स्मार्ट चीजें शुरू कर सकते हैं। उदाहरण के लिए, उपयोगकर्ता को याद दिलाएं कि उनका सत्र लॉग आउट होने से कुछ दिन पहले समाप्त हो रहा होगा, जिससे उन्हें टोकन में समाप्ति तिथि के आधार पर फिर से प्रमाणित करने का विकल्प मिलेगा। आप जो भी कल्पना कर सकते हैं।
तो संक्षेप में: JWTs अन्य सत्र तकनीकों के कुछ सवालों और कमियों का जवाब देता है।
जबकि JWTs सुरक्षित भंडारण या परिवहन जैसे अन्य मुद्दों का जवाब नहीं देता है, यह किसी भी नए सुरक्षा मुद्दों को पेश नहीं करता है।
JWTs के आसपास बहुत सारी नकारात्मकता मौजूद है लेकिन अगर आप उसी सुरक्षा को लागू करते हैं जो आप अन्य प्रकार के प्रमाणीकरण के लिए करेंगे, तो आप ठीक हो जाएंगे।
एक अंतिम नोट: यह कुकीज़ बनाम टोकन भी नहीं है। कुकीज़ सूचनाओं के भंडारण और परिवहन के लिए एक तंत्र है और इसका उपयोग JWT टोकन को स्टोर करने और परिवहन के लिए भी किया जा सकता है।
संक्षिप्त उत्तर है: कोई नहीं।
एक लंबा संस्करण है:
मैंने ग्राफक्यूएल डॉक्स में इस सिफारिश को पढ़ने के बाद सत्र प्रबंधन के लिए JWT को लागू किया :
यदि आप इनमें से किसी भी प्रमाणीकरण तंत्र से परिचित नहीं हैं, तो हम एक्सप्रेस-जेड का उपयोग करने की सलाह देते हैं क्योंकि यह भविष्य के लचीलेपन का त्याग किए बिना सरल है।
कार्यान्वयन वास्तव में सरल था क्योंकि इसमें केवल थोड़ा सा जटिलता जोड़ा गया था। हालांकि थोड़ी देर के बाद, मैं (आप की तरह) आश्चर्य करने लगा कि क्या लाभ थे। यह पता चलता है कि JWT के लिए बहुत कम (या संभवतः कोई भी) सत्र प्रबंधन जाता है, क्योंकि यह ब्लॉग पोस्ट विस्तार से बताता है:
मेरे दो सेंट, जो रास्ते में joepie91 के प्रसिद्ध ब्लॉग पोस्ट के कुछ विपरीत जोड़ते हैं।
यह देखते हुए कि आज (और कल) के अनुप्रयोग (अधिकतर) क्लाउड नेटिव हैं , स्टेटलेस JWT ऑथेंटिकेशन के
लिए एक आर्थिक लाभ है , जो कि आवेदन तराजू के रूप में होता है: क्लाउड एप्लिकेशन को प्रत्येक सांस के साथ खर्च होता है ।
यह लागत कम हो जाती है जब उपयोगकर्ताओं को अब सत्र स्टोर के खिलाफ "प्रमाणित" नहीं करना पड़ता है।
प्रसंस्करण
एक सत्र की दुकान चल रहा है 24/7 पैसे खर्च होते हैं।
आप K8S की दुनिया में मेमोरी आधारित समाधानों से दूर नहीं हो सकते हैं, क्योंकि फली अल्पकालिक है।
स्टिकी सत्र ठीक उसी कारण से अच्छा नहीं होगा।
स्टोरेज
स्टोरेज डेटा में पैसे खर्च होते हैं। SSD में डेटा संग्रहीत करना और भी अधिक खर्च होता है।
सत्र से संबंधित कार्यों को जल्दी से हल करने की आवश्यकता है, इसलिए एक ऑप्टिकल ड्राइव एक विकल्प नहीं है।
I / O
कुछ क्लाउड प्रदाता डिस्क से संबंधित I / O के लिए पैसे लेते हैं।
बैंडविड्थ
कुछ क्लाउड प्रदाता सर्वर इंस्टेंस के बीच नेटवर्क गतिविधि के लिए चार्ज करते हैं।
यह लागू होता है क्योंकि यह लगभग निश्चित है कि एपीआई और सत्र स्टोर अलग-अलग उदाहरण हैं।
सत्र स्टोर को क्लस्टर करना
लागत सभी उपरोक्त लागतों को आगे भी बढ़ाता है।
उपयोगकर्ता प्रमाणीकरण के लिए मुझे JWT और टोकन + कैश के बीच चयन करने का समान प्रश्न था।
इन लेखों को पढ़ने के बाद, मेरे लिए यह स्पष्ट है कि JWT के वादे उन समस्याओं को दूर नहीं करते हैं जो इसे लाती हैं। तो टोकन + कैश (रेडिस / मेमकेड) मेरे लिए जाने का रास्ता है।
प्रामाणिक हेडर बनाम जेडब्ल्यूटी बनाम सत्र - एपीआई के लिए सही प्रामाणिक तकनीक कैसे चुनें