JWT का मतलब json वेब टोकन है, यह JSON ऑब्जेक्ट के रूप में पार्टियों के बीच सूचना प्रसारित करने के लिए ओपन स्टैंडर का उपयोग करता है। यह कॉम्पैक्ट, यूआरएल-सुरक्षित है और प्रमाणीकरण और सूचना विनिमय के लिए वेब अनुप्रयोगों में बड़े पैमाने पर उपयोग किया जाता है।
जेडब्ल्यूटी को चाबियों और रहस्यों का उपयोग करके डिजिटल रूप से हस्ताक्षरित किया जाता है। हम उपयोगकर्ता को प्रमाणित करने के लिए इन कुंजियों और हस्ताक्षर के साथ JWT को सत्यापित करते हैं। अधिकांश वेब सिस्टम उपयोगकर्ताओं को कुछ संसाधनों तक पहुँचने के लिए अधिकृत करने के लिए JWT का उपयोग करते हैं।
एक JWT के तीन मुख्य घटक होते हैं: हेडर, पेलोड और हस्ताक्षर। जब हम एक टोकन बनाते हैं, तो हम हेडर और पेलोड पास करते हैं, और फिर टोकन हस्ताक्षर उत्पन्न करता है।
हेडरे - जेडब्ल्यूटी के हेडर में टोकन के बारे में मेटाडेटा होता है। इसमें तीन मान शामिल हैं: एल्ग, टाइप और किड। एल्ग टोकन पर हस्ताक्षर करने के लिए उपयोग किए जाने वाले एल्गोरिदम को निर्दिष्ट करता है, टाइप टोकन प्रकार को इंगित करता है, और किड एक वैकल्पिक पैरामीटर है जिसका उपयोग कुंजी की पहचान करने के लिए किया जाता है। बच्चे को शामिल करना है या नहीं यह आपके उपयोग के मामले पर निर्भर करता है।
{ "alg": "RS256", // allow [HS256,RS256,ES256] "typ": "JWT", // Specific Type Of token "kid": "12345" // Used to indicate which key was used to sign the JWT. This is particularly useful when multiple keys are in use }
पेलोड - पेलोड में हम कुछ कस्टम डेटा निर्दिष्ट करते हैं, ज्यादातर उपयोगकर्ता विशिष्ट डेटा जैसे यूजर आईडी और भूमिका को पेलोड में जोड़ते हैं।
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
हस्ताक्षर - हस्ताक्षर हेडर और पेलोड को एक गुप्त कुंजी (एचएस256 के लिए) के साथ एन्कोड करके या एक निजी कुंजी (आरएसए के लिए) के साथ हस्ताक्षर करके और फिर परिणाम को हैश करके तैयार किया जाता है। इस हस्ताक्षर का उपयोग टोकन को सत्यापित करने के लिए किया जाता है।
जैसा कि हमने चर्चा की, एक JWT के तीन घटक होते हैं: हेडर, पेलोड और हस्ताक्षर। हम हेडर और पेलोड प्रदान करते हैं, और हस्ताक्षर उनसे उत्पन्न होता है। इन सभी घटकों को संयोजित करने के बाद, हम टोकन बनाते हैं।
// Header Encoding Base64Url Encode({ "alg": "RS256", "typ": "JWT" }) → eyJhbGciOiAiUlMyNTYiLCAidHlwIjogIkpXVCJ9 // Payload Encoding Base64Url Encode({ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }) → eyJzdWIiOiAiMTIzNDU2Nzg5MCIsICJuYW1lIjogIkpvaG4gRG9lIiwgImlhdCI6IDE1MTYyMzkwMjJ9 // Concatenate Encoded header and payload ConcatenatedHash = Base64Url Encode(Header) "." Base64Url Encode(Payload) //Create Signature Hash = SHA-256(ConcatenatedHash) Signature = RSA Sign(Hash with Private Key) or HS256 Sign(Hash with secrate) // Create Token Token = Base64UrlEncode(Header) "." Base64UrlEncode(Payload) "." Signature
तो, JWT बनाने की प्रक्रिया इस प्रकार है: हम पेलोड और हेडर को एनकोड करते हैं, फिर उनसे हस्ताक्षर उत्पन्न करते हैं।
इससे पहले, हमने चर्चा की थी कि JWT कैसे बनाया जाए। अब, आइए चर्चा करें कि JWT को कैसे सत्यापित किया जाए। सत्यापन प्रक्रिया अनिवार्य रूप से टोकन निर्माण के विपरीत है। सबसे पहले, हम एक गुप्त या सार्वजनिक कुंजी का उपयोग करके टोकन को डिक्रिप्ट करते हैं। फिर, हम हस्ताक्षर उत्पन्न करने के लिए हेडर और पेलोड को जोड़ते हैं। यदि उत्पन्न हैश हस्ताक्षर से मेल खाता है, तो टोकन वैध है; अन्यथा, यह मान्य नहीं है।
// Token we recive in this formate Token = Base64UrlEncode(Header) "." Base64UrlEncode(Payload) "." Signature // Decrypt Signature TokenHash = RSA Decrypt(Hash with Public Key) or HS256 Sign(Hash with secrate) // Generate Hash From Encoded Header and Payload Hash = SHA-256(Base64UrlEncode(Header) "." Base64UrlEncode(Payload)) // Compare Hash if(TokenHash == Hash) "Valid" else "Not Valid"
JWT उपरोक्त सभी लाभ प्रदान करता है, जिससे यह उपयोगकर्ताओं को अधिकृत करने वाले अधिकांश प्रमाणीकरण तंत्रों के लिए एक लोकप्रिय विकल्प बन जाता है। इसके अतिरिक्त, JWT का उपयोग विभिन्न प्रमाणीकरण तकनीकों, जैसे DPoP और अन्य के साथ किया जा सकता है।
कोड में JWT का उपयोग करने के लिए, हम jsonwebtoken npm पैकेज का उपयोग करते हैं। JWTs के साथ काम करने की दो विधियाँ हैं: गुप्त कुंजी का उपयोग करने वाली सीधी विधि और कुंजी जोड़ी विधि (सार्वजनिक और निजी कुंजी का उपयोग करके)।
import jwt from 'jsonwebtoken'; // Define the type for the payload interface Payload { userId: number; username: string; } // Secret key for signing the JWT const secretKey: string = 'your-very-secure-secret'; // Payload to be included in the JWT const payload: Payload = { userId: 123, username: 'exampleUser' }; // Sign the JWT const token: string = jwt.sign(payload, secretKey, { expiresIn: '1h' }); console.log('Generated Token:', token);
import jwt from 'jsonwebtoken'; // Secret key for signing the JWT const secretKey: string = 'your-very-secure-secret'; // Verify the JWT try { const decoded = jwt.verify(token, secretKey) as Payload; console.log('Decoded Payload:', decoded); } catch (err) { console.error('Token verification failed:', (err as Error).message); }
import * as jwt from 'jsonwebtoken'; import { readFileSync } from 'fs'; // Load your RSA private key const privateKey = readFileSync('private_key.pem', 'utf8'); // Define your payload const payload = { sub: '1234567890', name: 'John Doe', iat: Math.floor(Date.now() / 1000) // Issued at }; // Define JWT sign options const signOptions: jwt.SignOptions = { algorithm: 'RS256', expiresIn: '1h' // Token expiration time }; // Generate the JWT const token = jwt.sign(payload, privateKey, signOptions); console.log('Generated JWT:', token);
import * as jwt from 'jsonwebtoken'; import { readFileSync } from 'fs'; // Load your RSA public key const publicKey = readFileSync('public_key.pem', 'utf8'); // Define JWT verify options const verifyOptions: jwt.VerifyOptions = { algorithms: ['RS256'] // Specify the algorithm used }; try { // Verify the JWT const decoded = jwt.verify(token, publicKey, verifyOptions) as jwt.JwtPayload; console.log('Decoded Payload:', decoded); } catch (error) { console.error('Error verifying token:', error); }
संक्षेप में, JSON वेब टोकन (JWTs) एक कॉम्पैक्ट प्रारूप का उपयोग करके पार्टियों के बीच सुरक्षित रूप से जानकारी प्रसारित करते हैं। आरएसए हस्ताक्षर और सत्यापन में हस्ताक्षर के लिए एक निजी कुंजी और सत्यापन के लिए एक सार्वजनिक कुंजी का उपयोग करना शामिल है। टाइपस्क्रिप्ट उदाहरण एक निजी आरएसए कुंजी के साथ जेडब्ल्यूटी उत्पन्न करने और इसे सार्वजनिक आरएसए कुंजी के साथ सत्यापित करने, सुरक्षित टोकन-आधारित प्रमाणीकरण और डेटा अखंडता सुनिश्चित करने का वर्णन करते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3