Tuesday, April 25, 2023

JSON Web Token in Hindi

JSON Web Token in Hindi

इस ट्यूटोरियल में हम एचटीटीपी, रेस्टफूल वेब सर्विसेज के बारे में समझेंगे। एचटीटीपी एक स्टैटलेस प्रोटोकोल है जब भी client और सरवर के बीच में कम्युनिकेशन होता है तो इसी प्रोटोकॉल का पालन करते हुए client के द्वारा रिक्वेस्ट server के पास भेजा जाता है और server के द्वारा रेस्पॉन्स client  के पास भेजा जाता है। दोनों ही एचटीटीपी प्रोटोकोल का पालन करते हुए यह कार्य करते हैं। 

हमें यह समझना चाहिए कि HTTP एक स्टेटलेस प्रोटोकॉल है। अतः हर बार जब रिक्वेस्ट client के द्वारा server को भेजा जाता है तो वह एक नया रिक्वेस्ट होता है। कहने का अर्थ यह है कि पुराने रिक्वेस्ट के स्टेट को server मेंटेन नहीं करता है।

अब सवाल यह है कि अगर server स्टेट को मेंटेन नहीं करता है तो स्टेट को मेंटेन करने के लिए हमें क्या करना होगा इसके लिए कई तरह के उपाय हैं उदाहरण के रूप में सेशन का उपयोग करके रिक्वेस्ट को स्टेटफूल बनाया जा सकता है।

सबसे पहले एक सेशन आईडी क्रिएट होता है जब यह सेशन आईडी क्रिएट हो जाता है तो हर रिक्वेस्ट और रिस्पांस के दौरान एक सेशन आईडी मेंटेन किया जाता है। स्टेट को cookie के भीतर या query string के भीतर मेंटेन किया जा सकता है।

Cookie की प्रॉब्लम यह है कि एप्लीकेशन को scale करने पर यह समस्या उत्पन्न करता है और दूसरे स्तर पर अगर क्लाइंट ब्राउज़र नहीं हो कर कुछ और तरह का एप्लीकेशन हो जैसे मोबाइल एप्लीकेशन तो ऐसी हालत में cookie को क्रिएट करने में समस्या होती है।

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

एप्लीकेशन यूआरएल के द्वारा एपीआई सर्विस के लिए रिक्वेस्ट भेजता है। यूआरएल के द्वारा क्लाइंट रिक्वेस्ट सर्वर को भेजता है। यूआरएल के भीतर पैरामीटर भी होता है। रेस्ट सर्विस यूआरएल के आधार पर निर्धारित करता है कि किस तरह के एपीआई सर्विस को रेस्पॉन्स के रूप में भेजना है।

किसी एपीआई के ऊपर ऑथेंटिकेशन का प्रयोग किया जा सकता है ताकि वही यूजर उस एपीआई का उपयोग करे जो ऑथेंटिक हो। इस प्रकार किसी खास प्रकार के यूजर को ही एपीआई उपलब्ध कराते हैं।

अब हम ऑथराइजेशन के बारे में बात करेंगे ऑथराइजेशन को आमतौर पर किसी टोकन के द्वारा हैंडल किया जाता है इसके लिए कई तरह के प्रोटोकॉल उपलब्ध है। आम तौर पर प्रचलित OAuth प्रोटोकॉल है।

हम एक कस्टम टोकन बना सकते हैं अथवा ओ डब्ल्यू आई एन OWIN के आधार पर आधारित टोकन बना सकते हैं या JWT टोकन का उपयोग कर सकते हैं।


सेशन और टोकन के बीच में अंतर है। सेशन को सर्वर के मेमोरी या किसी डेटाबेस के भीतर या REDIS के भीतर स्टोर किया जाता है। टोकन सेल्फ contained होता है उसके भीतर ऑथेंटिकेशन से सम्बंधित सारे आंकड़े सुरक्षित होते हैं। ऑथेंटिकेशन के लिए किसी सर्वर या डाटाबेस पर निर्भर नहीं रहना पड़ता है। 


हम ASP.NET Core वेब एप्लीकेशन का टेंपलेट यूज़ करते हुए वेब एपीआई को विकसित करेंगे।

रेस्टफुल वेब सर्विस के भीतर किसी रिसोर्स के लिए ASP डॉट नेट कोर के अंतर्गत कंट्रोलर होता है। प्रत्येक कंट्रोलर किसी रिसोर्स को अभिव्यक्त करता है। उदाहरण के लिए हमारे पास प्रोडक्ट कंट्रोलर, अकाउंट कंट्रोलर इत्यादि हो सकता है। 

कंट्रोलर एक विशेष प्रकार का क्लास होता है जो ControllerBase क्लास से इन्हेरीट होता है जब हम किसी सामान्य क्लास को कंट्रोलर में परिवर्तित करना चाहते हैं तो हमें उसे ControllerBase क्लास से इन्हेरीट करना होता है। इसके अलावा हमें दो एट्रिब्यूट डायरेक्टिव का प्रयोग अपने कंट्रोलर क्लास के ऊपर करना होता है।  पहला Route एट्रिब्यूट होता है जिसके द्वारा उस रिसोर्स को एक्सेस करने का रूट निर्धारित होता है। इसके बाद हमें उसके ऊपर ApiController नामक एट्रिब्यूट का उपयोग करना होता है जो उसको एपीआई कंट्रोलर में परिवर्तित कर देता है। 

हमें यह समझना चाहिए कि Application के अनुसार कंट्रोलर दो प्रकार का होता है 

एपीआई कंट्रोलर और एमवीसी कंट्रोलर। एपीआई कंट्रोलर के भीतर एचटीटीपी verb से सम्बंधित चार प्रकार के एक्शन मेथड होते हैं। यह एक्शन मेथड किसी व्यू को रिटर्न नहीं करते हैं बल्कि वे एचटीटीपी स्टेटस कोड इत्यादि को रिटर्न करते हैं जबकि एमवीसी पर आधारित कंट्रोलर किसी व्यू पेज को रिटर्न करते हैं।

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

सामान्य कंट्रोलर क्लास के बिहेवियर को और भी ज्यादा परिवर्तित करने के लिए हम ApiController ऐट्रिब्यूट का उपयोग करते हैं।

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

JSON वेब टोकन की संरचना

इस टुटोरिअल में हम समझेंगे कि जैसन वेब टोकन क्या है जेसन वेब टोकन को कैसे जनरेट किया जा सकता है और जेसन वेब टोकन को कैसे वैलिडेट किया जा सकता है और  कैसे जेसन वेब टोकन को कोई क्लाइंट एप्लीकेशन यूज़ कर सकता है।

ऑथेंटिकेशन करने के लिए टोकन का उपयोग किया जाता है और टोकन कई प्रकार का होता है उसमें जेसन वेब टोकन  एक प्रकार है। 

Structure of JSON Token

जेसन वेब टोकन के स्ट्रक्चर को समझना अति आवश्यक है। जेसन वेब टोकन के 3 हिस्से होते हैं सबसे पहले हिस्से में Header होता है दूसरे हिस्से में Payload होता है और तीसरा हिस्सा सिग्नेचर को वेरीफाई करने से संबंधित होता है। इन तीनों हिस्सों को पीरियड से अलग किया जाता है।

Header

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

Payload

टोकन के payload के अंतर्गत विभिन्न प्रकार के क्लेम होते हैं। प्रत्येक क्लेम को कीवैल्यू pair के रूप में चिन्हित किया जाता है।

Verify Signature

इसके बाद टोकन के सिग्नेचर को वेरीफाई करने के लिए तीसरा हिस्सा होता है। सिग्नेचर को वेरीफाई करने के लिए JSON ऑब्जेक्ट का उपयोग किया जाता है। इसमें key value pairs के रूप में तीन प्रॉपर्टीज होते हैं। 

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

Generating JWT

JSON वेब टोकन को जनरेट करने के लिए हमें asp.net कोर के अंतर्गत न्यूगेट पैकेज का उपयोग करना होता है।

अगर हम किसी और टेक्नोलॉजी का उपयोग कर रहे हैं तो हम उसी के अनुसार किसी और पैकेज का उपयोग उस टेक्नोलॉजी में करते हैं। फिलहाल हम asp.net कोर के अंतर्गत देखेंगे कि कैसे JSON वेब टोकन को जनरेट किया जा सकता है।

विचारणीय है कि टोकन के भीतर किस प्रकार का इंफॉर्मेशन संचित करना होगा। 

टोकन के भीतर क्लेम से सम्बंधित आंकड़ों को key value के युग्मरूप में प्रदान करना होता है। क्लेम के रूप में यूजर का नाम, ईमेल आईडी, रोल इत्यादि हो सकता है। इसके अलावा टोकन के वेलिडेशन के लिए issuer, audience, secret key, Expiration Time इत्यादि आंकड़ों को देना पड़ता है। issuer से अभिप्राय उस सर्वर से है जिसने टोकन को generate किया है। audience से अभिप्राय उस एपीआई से है जिसको यूजर एक्सेस करना चाहता है। TokenValidationParameters नामक क्लास के ऑब्जेक्ट के भीतर वेलिडेशन से सम्बंधित पैरामीटर्स को व्यक्त करते हैं।

Secret key एक 256 bytes का एन्क्रिप्टेड कोड होता है। इंक्रिप्शन किस अल्गोरिथम का पालन करते हुए होगा यह इंफॉर्मेशन टोकन के header के भीतर दिया हुआ होता है।

© अजीत कुमार, सर्वाधिकार सुरक्षित।

इस आलेख को उद्धृत करते हुए इस लेख के लिंक का भी विवरण दें। इस आलेख को कॉपीराइट सूचना के साथ यथावत साझा करने की अनुमति है। कृपया इसे ऐसे स्थान पर साझा न करें जहाँ इसे देखने के लिए शुल्क देना पडे।

No comments:

Post a Comment

Hot Topics