Ce este un JSON Web Token?
Un JSON Web Token (JWT) este un plic compact și sigur pentru URL, pentru o sarcină utilă mică de revendicări. Este formatul standard de credentiale pentru sesiuni web fără stare, tokenuri de identitate OAuth/OIDC, autentificare API mașină-la-mașină și linkuri magice semnate. Un JWT este întotdeauna trei segmente base64url unite cu puncte: header.payload.signature. Antetul și sarcina utilă sunt JSON; semnătura este un MAC binar sau o semnătură digitală peste primele două segmente.
Cum funcționează JWT-urile?
Când această unealtă decodifică un token, parcurge aceeași cale în trei pași pe care o urmează fiecare bibliotecă JWT:
- Împarte tokenul pe puncte în exact trei segmente nevide. Orice altă formă este invalidă.
- Decodifică base64url segmentele 0 și 1, apoi
JSON.parsefiecare. Antetul poartă algoritmul (alg) și tipul tokenului (typ). Sarcina utilă poartă revendicările (sub,exp,iat, chei personalizate). - Dacă este furnizat un secret, recalculează MAC-ul peste
<segment0>.<segment1>folosind algoritmul din antet. Compară octeții cu al treilea segment. - Afișează rezultatul verificării alături de revendicările decodificate, inclusiv un indicator de expirare lizibil pentru om calculat din revendicarea
exp.
De ce să decodifici JWT-uri în browser?
Lipirea unui JWT real, în uz, într-un depanator la distanță divulgă credentialele către jurnalele, stivele de observabilitate și orice partener către care serviciul trimite date ale acelui serviciu. Chiar și când site-ul terț susține că nu înregistrează tokenuri, nu ai nicio modalitate de a verifica. Această unealtă a fost construită astfel încât să nu fii nevoit să faci niciodată acest compromis:
- Zero rețea: runtime-ul nu are apeluri
fetch,XMLHttpRequestsausendBeacon. Deschide DevTools în timp ce decodifici și verifici — panoul Network rămâne tăcut. - Web Crypto nativ: verificarea HMAC folosește
crypto.subtle.importKeyșicrypto.subtle.sign, aceleași primitive pe care le-ar folosi runtime-ul tău. - Implementare statică: fiecare pagină este un singur fișier HTML static, fără un endpoint de server de compromis. Nu există token de scurs pentru că nu există server la care să se scurgă.
Ce verifică această unealtă și ce nu?
Versiunea 1 a acestei unelte verifică doar semnăturile din familia HMAC-SHA. Concret:
- Suportat: HS256, HS384, HS512. Furnizează secretul partajat, iar unealta va recalcula și compara MAC-ul.
- Neîncă suportat: RS256/384/512 (RSA), ES256/384/512 (ECDSA), EdDSA și PS256/384/512 (RSA-PSS). Acestea necesită o cheie publică în formă PEM sau JWK și sunt amânate în mod deliberat pentru o versiune ulterioară.
- Refuzat:
alg: "none". Unealta decodifică tokenul dar îl marchează explicit ca nesigur — nu se realizează nicio validare a semnăturii, iar orice sistem de producție care acceptă un astfel de token are o vulnerabilitate gravă.
Cum arată un exemplu de decodificare JWT?
Lipește tokenul exemplu canonic RFC 7519 în câmpul de intrare de mai sus:
eyJhbG...VCJ9.eyJzdW...IyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Antetul se decodifică în {"alg":"HS256","typ":"JWT"} iar sarcina utilă în {"sub":"1234567890","name":"John Doe","iat":1516239022}. Introdu secretul-tău-de-256-de-biți în panoul de verificare și verificarea semnăturii returnează valid. Schimbă un singur caracter al secretului și returnează invalid. Nimic din toate acestea nu părăsește browserul tău.
Acesta este decodificatorul JWT pe care ne-am fi dorit să existe când trebuia să depanăm un token în producție: respectă confidențialitatea, este rapid și construit pe aceleași primitive pe care le folosește runtime-ul.