JSON Web Token என்றால் என்ன?
ஒரு JSON Web Token (JWT) என்பது ஒரு சிறிய claims payload க்கான compact, URL-safe envelope. இது stateless web sessions, OAuth/OIDC ID tokens, machine-to-machine API auth மற்றும் signed magic links க்கான நிலையான credential வடிவம். ஒரு JWT எப்போதும் dots உடன் இணைக்கப்பட்ட மூன்று base64url segments: header.payload.signature. Header மற்றும் payload JSON; signature முதல் இரண்டு segments மீது ஒரு binary MAC அல்லது digital signature.
JWTs எவ்வாறு வேலை செய்கின்றன?
இந்த கருவி ஒரு token டிகோட் செய்யும்போது ஒவ்வொரு JWT library பின்பற்றும் அதே மூன்று-படி பாதையில் நடக்கிறது:
- Token ஐ dots ல் சரியாக மூன்று non-empty segments ஆக பிரிக்கவும். வேறு எந்த வடிவமும் தவறானது.
- Segments 0 மற்றும் 1 ஐ Base64url-decode செய்து, பிறகு ஒவ்வொன்றையும்
JSON.parseசெய்யவும். Header algorithm (alg) மற்றும் token type (typ) கொண்டிருக்கிறது. Payload claims (sub,exp,iat, custom keys) கொண்டிருக்கிறது. - ஒரு secret கொடுக்கப்பட்டால், header ல் உள்ள algorithm பயன்படுத்தி
<segment0>.<segment1>மீது MAC மீண்டும் கணக்கிடவும். மூன்றாவது segment க்கு எதிராக bytes compare செய்யவும். expclaim இலிருந்து கணக்கிட்ட human-readable expiry indicator உட்பட, decoded claims உடன் சரிபார்ப்பு முடிவை surface செய்யவும்.
உலாவியில் JWTs ஏன் டிகோட் செய்ய வேண்டும்?
Real, in-use JWT ஐ remote debugger ல் ஒட்டுவது அந்த service இன் logs, observability stack மற்றும் service தரவு அனுப்பும் எந்த partner க்கும் credential ஐ கசிவிக்கிறது. Third-party site tokens log செய்வதில்லை என்று claim செய்தாலும், நீங்கள் அதை verify செய்ய வழியில்லை. இந்த கருவி நீங்கள் அந்த compromise செய்ய வேண்டியதில்லை என்பதற்காக கட்டப்பட்டது:
- பூஜ்ய network: runtime ல்
fetch,XMLHttpRequestஅல்லதுsendBeaconcalls இல்லை. Decode மற்றும் verify செய்யும்போது DevTools திறக்கவும் — Network panel அமைதியாக இருக்கும். - Native Web Crypto: HMAC verification
crypto.subtle.importKeyமற்றும்crypto.subtle.signபயன்படுத்துகிறது, உங்கள் runtime அழைக்கும் அதே primitives. - Static deploy: ஒவ்வொரு பக்கமும் server endpoint இல்லாத ஒரு single static HTML கோப்பு. Token கசிய எந்த சேவையகமும் இல்லை.
இந்த கருவி என்னை verify செய்கிறது, என்னை செய்யவில்லை?
இந்த கருவியின் Version 1 HMAC-SHA family signatures மட்டுமே verify செய்கிறது. குறிப்பாக:
- ஆதரிக்கப்படுகிறது: HS256, HS384, HS512. Shared secret கொடுக்கவும், கருவி MAC மீண்டும் கணக்கிட்டு compare செய்யும்.
- இன்னும் ஆதரிக்கப்படவில்லை: RS256/384/512 (RSA), ES256/384/512 (ECDSA), EdDSA, மற்றும் PS256/384/512 (RSA-PSS). இவை PEM அல்லது JWK வடிவத்தில் public key தேவைப்படுகின்றன மற்றும் வேண்டுமென்றே follow-up release க்கு ஒத்திவைக்கப்பட்டுள்ளன.
- மறுக்கப்பட்டது:
alg: "none". கருவி token டிகோட் செய்கிறது ஆனால் வெளிப்படையாக அதை பாதுகாப்பற்றதாக flag செய்கிறது — எந்த signature validation ம் நடக்கவில்லை, மற்றும் இத்தகைய token ஏற்கும் எந்த production system ம் ஒரு தீவிரமான vulnerability கொண்டுள்ளது.
JWT decoding எடுத்துக்காட்டு எப்படி இருக்கும்?
Canonical RFC 7519 example token ஐ மேலே உள்ள input field ல் ஒட்டவும்:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Header {"alg":"HS256","typ":"JWT"} ஆக மற்றும் payload {"sub":"1234567890","name":"John Doe","iat":1516239022} ஆக decode ஆகுகிறது. Verify panel ல் your-256-bit-secret உள்ளிடவும், signature சரிபார்ப்பு செல்லுபடியாகும் என்று திருப்பித் தருகிறது. Secret ல் ஒரு எழுத்தை மாற்றினால் செல்லுபடியாகாது என்று திருப்பித் தருகிறது. இதில் எதுவும் உங்கள் உலாவியை விட்டு போவதில்லை.
Production ல் ஒரு token debug செய்ய வேண்டியிருக்கும்போது நாங்கள் விரும்பிய JWT decoder இதுவே: privacy-respecting, வேகமானது, மற்றும் runtime பயன்படுத்தும் அதே primitives ல் கட்டப்பட்டது.