चलिए शुरू करते हैं,
JWT एक बहुत ही आधुनिक, सरल और सुरक्षित तरीका है जो Json Web टोकन के लिए विस्तारित होता है। Json वेब टोकन प्रमाणीकरण के लिए एक स्टेटलेस समाधान है। इसलिए सर्वर पर किसी भी सत्र राज्य को संग्रहीत करने की आवश्यकता नहीं है, जो निश्चित रूप से आरामदायक एपीआई के लिए एकदम सही है। रेस्टफुल एपीआई हमेशा स्टेटलेस होनी चाहिए, और JWTs के साथ ऑथेंटिकेशन के लिए सबसे ज्यादा इस्तेमाल किया जाने वाला ऑप्शन सिर्फ सेशन का इस्तेमाल कर यूजर के लॉग-इन स्टेट को सर्वर पर स्टोर करना है। लेकिन फिर निश्चित रूप से उस सिद्धांत का पालन नहीं करता है जो कहता है कि आराम करने वाले एपीआई स्टेटलेस होने चाहिए और यही कारण है कि जेडब्ल्यूटी जैसे समाधान लोकप्रिय और प्रभावी हो गए।
तो अब आइए जानते हैं कि जेनसन वेब टोकन के साथ वास्तव में प्रमाणीकरण कैसे काम करता है। यह मानते हुए कि हमारे डेटाबेस में पहले से ही एक पंजीकृत उपयोगकर्ता है। तो उपयोगकर्ता का उपयोगकर्ता नाम और पासवर्ड के साथ एक पोस्ट अनुरोध करने से शुरू होता है, एप्लिकेशन तब जांचता है कि क्या उपयोगकर्ता मौजूद है और यदि पासवर्ड सही है, तो एप्लिकेशन केवल उस उपयोगकर्ता के लिए एक अद्वितीय Json वेब टोकन उत्पन्न करेगा।
टोकन एक का उपयोग कर बनाई गई है गुप्त स्ट्रिंग है कि है एक सर्वर पर संग्रहीत । इसके बाद, सर्वर उस JWT को क्लाइंट को वापस भेज देता है जो इसे कुकी में या स्थानीय भंडारण में संग्रहीत करेगा।
बस इस तरह, उपयोगकर्ता को प्रमाणित किया जाता है और मूल रूप से सर्वर पर किसी भी राज्य को छोड़े बिना हमारे आवेदन में लॉग इन किया जाता है।
इसलिए सर्वर वास्तव में यह नहीं जानता है कि कौन सा उपयोगकर्ता वास्तव में लॉग इन है, लेकिन निश्चित रूप से, उपयोगकर्ता जानता है कि वह लॉग इन है क्योंकि उसके पास एक वैध जोंस वेब टोकन है जो कि आवेदन के संरक्षित भागों तक पहुंचने के लिए पासपोर्ट की तरह है।
तो फिर, बस यह सुनिश्चित करने के लिए कि आपको विचार मिला है। जैसे ही वह सर्वर पर कहीं भी सेव नहीं होता है, उसका यूनीक वैध जोंस वेब टोकन वापस मिल जाता है, जैसे ही कोई उपयोगकर्ता लॉग इन करता है। और इसलिए यह प्रक्रिया पूरी तरह से स्टेटलेस है।
फिर, जब भी कोई उपयोगकर्ता उदाहरण के लिए अपने उपयोगकर्ता प्रोफ़ाइल डेटा जैसे संरक्षित मार्ग का उपयोग करना चाहता है। वह अपने जसन वेब टोकन को एक अनुरोध के साथ भेजता है, इसलिए यह उस मार्ग तक पहुंचने के लिए अपना पासपोर्ट दिखाने जैसा है।
एक बार अनुरोध सर्वर को हिट कर देता है, तो हमारा ऐप यह सत्यापित करेगा कि क्या Json वेब टोकन वास्तव में वैध है और यदि उपयोगकर्ता वास्तव में कहता है कि वह कौन है, तो ठीक है, तो अनुरोधित डेटा क्लाइंट को भेजा जाएगा और यदि नहीं, तो वहाँ होगा उपयोगकर्ता को यह बताने में त्रुटि हो कि उसे उस संसाधन तक पहुंचने की अनुमति नहीं है।
यह सभी संचार https पर होने चाहिए, ताकि एन्क्रिप्ट किया गया Http सुरक्षित रहे ताकि किसी को भी पासवर्ड या Json Web टोकन तक पहुँच मिल सके। तभी हमारे पास वास्तव में सुरक्षित प्रणाली है।
तो एक Json Web Token इस स्क्रीनशॉट के बायें हिस्से की तरह दिखता है जिसे JWT डिबगर से jwt.ioSo पर अनिवार्य रूप से लिया गया था, यह तीन भागों से बना एन्कोडिंग स्ट्रिंग है। हेडर, पेलोड और सिग्नेचर अब हेडर केवल टोकन के बारे में कुछ मेटाडेटा है और पेलोड वह डेटा है जिसे हम टोकन में एनकोड कर सकते हैं, कोई भी डेटा जो हम वास्तव में चाहते हैं। तो जितना अधिक डेटा हम यहाँ JWT को बड़ा करना चाहते हैं। वैसे भी, ये दो हिस्से सिर्फ सादे पाठ हैं जो एन्कोडेड हो जाएंगे, लेकिन एन्क्रिप्टेड नहीं।
इसलिए कोई भी उन्हें डिकोड कर सकेगा और उन्हें पढ़ सकेगा , हम यहां कोई संवेदनशील डेटा संग्रहीत नहीं कर सकते। लेकिन यह एक समस्या नहीं है क्योंकि तीसरे भाग में, इसलिए हस्ताक्षर में, वह जगह है जहां चीजें वास्तव में दिलचस्प होती हैं। हस्ताक्षर हेडर, पेलोड और सर्वर पर सहेजे गए रहस्य का उपयोग करके बनाया जाता है।
और इस पूरी प्रक्रिया को तब Json Web Token पर हस्ताक्षर करना कहा जाता है । हस्ताक्षरित एल्गोरिथ्म हेडर, पेलोड और एक अद्वितीय हस्ताक्षर बनाने के लिए रहस्य लेता है। तो केवल यह डेटा और रहस्य ही इस हस्ताक्षर को बना सकता है, ठीक है? फिर हेडर और पेलोड के साथ, ये हस्ताक्षर JWT बनाते हैं, जो फिर क्लाइंट को भेजा जाता है।
एक बार जब सर्वर को एक संरक्षित मार्ग तक पहुंच प्रदान करने के लिए एक JWT प्राप्त होता है, तो यह निर्धारित करने के लिए इसे सत्यापित करने की आवश्यकता है कि उपयोगकर्ता वास्तव में वह है जो वह होने का दावा करता है। दूसरे शब्दों में, यह सत्यापित करेगा कि कोई भी हेडर और टोकन के पेलोड डेटा को नहीं बदले। तो फिर से, यह सत्यापन चरण यह जांच करेगा कि क्या कोई तीसरा पक्ष वास्तव में हेडर या जौन वेब टोकन के पेलोड को बदल नहीं रहा है।
तो, यह सत्यापन वास्तव में कैसे काम करता है? खैर, यह वास्तव में काफी सीधा है। एक बार JWT प्राप्त होने के बाद, सत्यापन अपने हेडर और पेलोड को ले जाएगा, और एक साथ उस रहस्य के साथ जो अभी भी सर्वर पर सहेजा गया है, मूल रूप से एक परीक्षण हस्ताक्षर बनाते हैं।
लेकिन जब JWT को पहली बार बनाया गया था तो मूल हस्ताक्षर टोकन में ही था, है ना? और यही इस सत्यापन की कुंजी है। क्योंकि अब हमें बस इतना करना है कि मूल हस्ताक्षर के साथ परीक्षण हस्ताक्षर की तुलना करें। और यदि परीक्षण हस्ताक्षर मूल हस्ताक्षर के समान है, तो इसका मतलब है कि पेलोड और हेडर को संशोधित नहीं किया गया है।
क्योंकि यदि उन्हें संशोधित किया गया था, तो परीक्षण हस्ताक्षर अलग होना होगा। इसलिए इस मामले में जहां डेटा में कोई फेरबदल नहीं किया गया है, तब हम उपयोगकर्ता को प्रमाणित कर सकते हैं। और हां, अगर दोनों हस्ताक्षर वास्तव में अलग-अलग हैं, तो इसका मतलब है कि किसी ने डेटा के साथ छेड़छाड़ की है। आमतौर पर पेलोड को बदलने की कोशिश करके। लेकिन पेलोड में हेरफेर करने वाले तीसरे पक्ष के पास निश्चित रूप से गुप्त तक पहुंच नहीं है, इसलिए वे जेडब्ल्यूटी पर हस्ताक्षर नहीं कर सकते। इसलिए मूल हस्ताक्षर हेरफेर किए गए डेटा के अनुरूप नहीं होंगे। और इसलिए, इस मामले में सत्यापन हमेशा विफल रहेगा। और इस पूरे सिस्टम को काम करने की कुंजी है। यह जादू है जो जेडब्ल्यूटी को इतना सरल बनाता है, लेकिन यह भी बहुत शक्तिशाली है।
md5('original messaged' + secret) != md5('changed message' + secret)
इस प्रकार यदि कोई संदेश बदलता है तो आप इसका पता लगा सकते हैं