"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > जेडब्ल्यूटी को समझना

जेडब्ल्यूटी को समझना

2024-08-24 को प्रकाशित
ब्राउज़ करें:915

JWT क्या है?

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 बनाने की प्रक्रिया इस प्रकार है: हम पेलोड और हेडर को एनकोड करते हैं, फिर उनसे हस्ताक्षर उत्पन्न करते हैं।

Understanding the JWT

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"

जेडब्ल्यूटी का उपयोग करने के लाभ

  1. सुरक्षा - जेडब्ल्यूटी डिजिटल रूप से हस्ताक्षरित हैं, जो डेटा की अखंडता और प्रामाणिकता सुनिश्चित करते हैं
  2. कॉम्पैक्ट - जेडब्ल्यूटी आकार में छोटे होते हैं, जो उन्हें नेटवर्क पर संचारित करने में कुशल बनाते हैं।
  3. स्वयं निहित - जेडब्ल्यूटी में उपयोगकर्ता के बारे में सभी आवश्यक जानकारी होती है, जिससे डेटाबेस को कई बार क्वेरी करने की आवश्यकता कम हो जाती है।

JWT उपरोक्त सभी लाभ प्रदान करता है, जिससे यह उपयोगकर्ताओं को अधिकृत करने वाले अधिकांश प्रमाणीकरण तंत्रों के लिए एक लोकप्रिय विकल्प बन जाता है। इसके अतिरिक्त, JWT का उपयोग विभिन्न प्रमाणीकरण तकनीकों, जैसे DPoP और अन्य के साथ किया जा सकता है।

अपने कोड में JWT का उपयोग कैसे करें

कोड में 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) एक कॉम्पैक्ट प्रारूप का उपयोग करके पार्टियों के बीच सुरक्षित रूप से जानकारी प्रसारित करते हैं। आरएसए हस्ताक्षर और सत्यापन में हस्ताक्षर के लिए एक निजी कुंजी और सत्यापन के लिए एक सार्वजनिक कुंजी का उपयोग करना शामिल है। टाइपस्क्रिप्ट उदाहरण एक निजी आरएसए कुंजी के साथ जेडब्ल्यूटी उत्पन्न करने और इसे सार्वजनिक आरएसए कुंजी के साथ सत्यापित करने, सुरक्षित टोकन-आधारित प्रमाणीकरण और डेटा अखंडता सुनिश्चित करने का वर्णन करते हैं।

विज्ञप्ति वक्तव्य यह लेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/dkmen/understand-the-jwt-3pl5?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.कॉम से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3