JWT Encoder
HS256, HS384, HS512 के साथ JSON Web Tokens बनाएं और हस्ताक्षर करें
हेडर
पेलोड
गुप्त कुंजी
एन्कोडित JWT
आपकी गुप्त कुंजी कभी भी आपके ब्राउज़र से नहीं निकलती। सभी हस्ताक्षर क्लाइंट-साइड पर होते हैं।
JWT एन्कोडिंग क्या है?
JWT एन्कोडिंग एक JSON Web Token बनाने की प्रक्रिया है — एक कॉम्पैक्ट, URL-सुरक्षित स्ट्रिंग जो क्रिप्टोग्राफिक कुंजी से हस्ताक्षरित दावों के एक सेट को ले जाती है। परिणाम RFC 7519 द्वारा परिभाषित एक तीन-भाग टोकन (हेडर.पेलोड.हस्ताक्षर) है जिसे सर्वर सत्र स्थिति बनाए रखे बिना सत्यापित कर सकते हैं।
हेडर हस्ताक्षर एल्गोरिदम (जैसे HS256) और टोकन प्रकार घोषित करता है। पेलोड में क्लेम होते हैं — कुंजी-मान युग्म जैसे subject (sub), समाप्ति समय (exp), और आपके अनुप्रयोग को आवश्यक कोई भी कस्टम डेटा। दोनों भागों को JSON के रूप में क्रमबद्ध किया जाता है, फिर base64url-एन्कोड किया जाता है। सिग्नेचर एक सीक्रेट की का उपयोग करके एन्कोडेड हेडर और पेलोड पर संगणित होता है, जो तीनों खंडों को एक साथ बांधता है।
सत्र कुकीज़ के विपरीत, JWT स्व-निहित होते हैं: सत्यापनकर्ता को डेटाबेस से पूछताछ करने या बाहरी सेवा को कॉल करने की आवश्यकता नहीं होती। यही कारण है कि JWT-आधारित प्रमाणीकरण REST API, माइक्रोसर्विसेज़ और सिंगल-पेज अनुप्रयोगों में लोकप्रिय है जहाँ स्टेटलेस प्राधिकरण विलंबता कम करता है और क्षैतिज स्केलिंग को सरल बनाता है।
JWT Encoder का उपयोग क्यों करें?
JWT को हाथ से बनाने के लिए base64url एन्कोडिंग, JSON क्रमबद्धता और HMAC संगणना की आवश्यकता होती है। यह टूल तीनों चरणों को तुरंत संभाल लेता है ताकि आप क्लेम को सही करने पर ध्यान केंद्रित कर सकें।
JWT Encoder के उपयोग के मामले
HS256 बनाम HS384 बनाम HS512: HMAC एल्गोरिदम तुलना
तीनों एल्गोरिदम साझा सीक्रेट के साथ HMAC (Hash-based Message Authentication Code) का उपयोग करते हैं। अंतर अंतर्निहित हैश फ़ंक्शन में है, जो सिग्नेचर लंबाई और सुरक्षा मार्जिन को प्रभावित करता है। अधिकांश अनुप्रयोगों के लिए HS256 पर्याप्त सुरक्षा प्रदान करता है। HS384 या HS512 चुनें जब अनुपालन आवश्यकताएं (जैसे FIPS-140) अधिक मजबूत हैश अनिवार्य करती हैं या जब आपके टोकन उच्च-मूल्य प्राधिकरण निर्णय वहन करते हैं।
| एल्गोरिदम | हैश | सिग्नेचर | गति | सामान्य उपयोग |
|---|---|---|---|---|
| HS256 | SHA-256 | 32 B | Fastest | General purpose, default for most libraries |
| HS384 | SHA-384 | 48 B | Fast | Higher security margin, FIPS-140 compliant |
| HS512 | SHA-512 | 64 B | Fast | Maximum HMAC security, large payloads |
मानक JWT क्लेम संदर्भ
RFC 7519 सात पंजीकृत क्लेम परिभाषित करता है। कोई भी अनिवार्य नहीं है, लेकिन इन्हें सही ढंग से उपयोग करने से अंतर-संचालनीयता और सुरक्षा बेहतर होती है। exp क्लेम विशेष रूप से महत्वपूर्ण है — बिना समाप्ति वाले टोकन अनिश्चित काल तक वैध रहते हैं यदि सीक्रेट नहीं बदला जाता।
| क्लेम | नाम | विवरण | उदाहरण |
|---|---|---|---|
| iss | Issuer | Who issued the token | "auth.example.com" |
| sub | Subject | Who the token represents | "user-123" |
| aud | Audience | Intended recipient service | "api.example.com" |
| exp | Expiration | Unix timestamp — token invalid after this time | 1717203600 |
| nbf | Not Before | Unix timestamp — token invalid before this time | 1717200000 |
| iat | Issued At | Unix timestamp when the token was created | 1717200000 |
| jti | JWT ID | Unique token identifier for revocation tracking | "a1b2c3d4" |
कोड में JWT एन्कोडिंग
ये उदाहरण दिखाते हैं कि JWT को प्रोग्रामेटिक रूप से कैसे बनाया और हस्ताक्षरित किया जाए। प्रत्येक कोड खंड एक वैध HS256-हस्ताक्षरित टोकन उत्पन्न करता है। उत्पादन प्रणालियों के लिए, हमेशा exp क्लेम सेट करें और कम से कम 256 बिट की क्रिप्टोग्राफिक रूप से यादृच्छिक सीक्रेट का उपयोग करें।
async function signJWT(payload, secret, alg = 'HS256') {
const header = { alg, typ: 'JWT' }
const enc = new TextEncoder()
// Base64url encode header and payload
const b64url = (obj) =>
btoa(JSON.stringify(obj)).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')
const h = b64url(header)
const p = b64url(payload)
// Sign with HMAC-SHA256
const key = await crypto.subtle.importKey(
'raw', enc.encode(secret),
{ name: 'HMAC', hash: 'SHA-256' }, false, ['sign']
)
const sig = await crypto.subtle.sign('HMAC', key, enc.encode(`${h}.${p}`))
const s = btoa(String.fromCharCode(...new Uint8Array(sig)))
.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')
return `${h}.${p}.${s}`
}
// Usage
const token = await signJWT(
{ sub: 'user-123', name: 'Alice', iat: Math.floor(Date.now() / 1000) },
'your-256-bit-secret'
)
// → "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOi..."import jwt
import time
payload = {
"sub": "user-123",
"name": "Alice",
"iat": int(time.time()),
"exp": int(time.time()) + 3600, # expires in 1 hour
}
# Sign with HS256 (default)
token = jwt.encode(payload, "your-256-bit-secret", algorithm="HS256")
# → "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOi..."
# Verify and decode
decoded = jwt.decode(token, "your-256-bit-secret", algorithms=["HS256"])
# → {"sub": "user-123", "name": "Alice", "iat": 1717200000, "exp": 1717203600}const jwt = require('jsonwebtoken')
const payload = {
sub: 'user-123',
name: 'Alice',
role: 'admin',
}
// Sign — iat is added automatically
const token = jwt.sign(payload, 'your-256-bit-secret', {
algorithm: 'HS256',
expiresIn: '1h', // sets exp claim
issuer: 'auth.example.com', // sets iss claim
})
// Verify
const decoded = jwt.verify(token, 'your-256-bit-secret')
// → { sub: 'user-123', name: 'Alice', role: 'admin', iat: ..., exp: ... }package main
import (
"fmt"
"time"
"github.com/golang-jwt/jwt/v5"
)
func main() {
claims := jwt.MapClaims{
"sub": "user-123",
"name": "Alice",
"iat": time.Now().Unix(),
"exp": time.Now().Add(time.Hour).Unix(),
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
signed, _ := token.SignedString([]byte("your-256-bit-secret"))
fmt.Println(signed)
// → eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOi...
}