Fără încărcare, 100% local, fără cont

Tutorial

Cum decodezi un JWT fără să-l scurgi

Un JSON Web Token poartă date reale: utilizatorul căruia i-a fost emis, scopurile pe care le acordă, momentul în care expiră. A-l lipi într-un decodor online la întâmplare înseamnă a preda acele date, și adesea o sesiune încă valabilă, unui server pe care nu îl controlezi. Decodorul de mai jos rulează în întregime în browserul tău, așa că poți citi ce se află într-un token, poți verifica dacă a expirat și poți confirma o semnătură HMAC atunci când știi secretul, totul fără ca vreo singură cerere de rețea să părăsească fila ta.

Pas cu pas

  1. Deschide decodorul JWT și lipește tokenul în caseta de intrare. Un JWT este format din trei segmente Base64Url unite prin puncte: antet, sarcină utilă și semnătură. Îl poți lipi cu prefixul Bearer sau fără; instrumentul citește structura în ambele cazuri și îți spune imediat dacă formatul este greșit.
  2. Citește antetul și sarcina utilă decodate. Antetul arată algoritmul de semnare (de exemplu HS256 sau RS256) și id-ul cheii, dacă există. Sarcina utilă enumeră revendicările: pentru cine este tokenul (sub), cine l-a emis (iss) și marcajele temporale. Instrumentul transformă câmpurile numerice iat, nbf și exp în date lizibile și semnalează dacă tokenul mai este valabil sau a expirat deja.
    Un JWT decodat care arată algoritmul antetului și revendicările sarcinii utile cu date de emitere și de expirare lizibile
  3. Dacă tokenul folosește HS256 și deții secretul partajat, lipește secretul în câmpul de verificare și apasă Verifică. Instrumentul recalculează HMAC peste antet și sarcina utilă și îl compară cu semnătura, astfel afli dacă tokenul este autentic sau a fost modificat. Pentru tokenurile RS256 sau ES256, semnarea folosește o cheie privată pe care nu o ai, așa că instrumentul inspectează revendicările, dar nu pretinde că verifică semnătura.
    Câmpul de verificare HMAC completat cu secretul partajat și o insignă de semnătură validă pentru un token HS256

De ce nu ar trebui să lipești niciodată un token pe un site la întâmplare

Un JWT nu este criptat. Antetul și sarcina utilă sunt doar codate Base64Url, ceea ce înseamnă că oricine primește tokenul poate citi fiecare revendicare din el: e-mail, id de utilizator, roluri, indicatori interni. Dacă tokenul este unul de acces care nu a expirat, oricine îl deține îl poate reutiliza și poate acționa în numele tău până când acesta expiră. Când lipești un token activ într-un decodor găzduit, trimiți toate acestea în jurnalele acelui server. Decodarea tokenului pe propria mașină, fără încărcare, este singura cale de a-l inspecta fără a lărgi cercul celor care îl pot vedea. Poți confirma că nu există trafic deschizând panoul de rețea în timp ce decodezi.

Ce îți poate și ce nu îți poate spune semnătura

Semnătura este ceea ce împiedică pe cineva să modifice revendicările și să scape nepedepsit. Pentru un token HS256, același secret semnează și verifică, deci, dacă știi secretul, poți confirma pe deplin chiar aici că tokenul este autentic. Pentru tokenurile RS256 și ES256, o cheie privată semnează tokenul și doar cheia publică pereche îl verifică; cheia privată nu părăsește niciodată emitentul, așa că un instrument pe partea de client poate citi revendicările, dar nu poate dovedi onest semnătura fără acea cheie publică. Tratează sarcina utilă decodată ca pe o afirmație făcută de emitent, nu ca pe o dovadă, până când semnătura este verificată de cel care deține cheia de verificare. Pentru a calcula hash sau a compara secrete separat, generatorul de hash de pe acest site rulează tot local.

Structura JWT și ce dezvăluie fiecare parte

Un JWT este format din trei segmente codificate Base64url separate prin puncte: header, payload și semnătură. Header-ul declară tipul de token („JWT”) și algoritmul: HS256 (HMAC-SHA-256, un secret partajat) sau RS256 (RSA-SHA-256, o pereche de chei publică/privată) sunt cei mai comuni. Payload-ul conține revendicări precum `sub` (subiect, de obicei un ID de utilizator), `iat` (timestamp Unix de emitere), `exp` (timestamp Unix de expirare), `aud` (audiența vizată) și revendicări personalizate de aplicație precum roluri sau scopuri. Base64url nu este criptare: este o variantă a Base64 sigură pentru URL care înlocuiește `+` cu `-` și `/` cu `_` și omite padding-ul. Oricine deține șirul brut al token-ului poate decoda header-ul și payload-ul fără cheia de semnare. Numai segmentul semnăturii necesită cheia pentru verificare. De aceea, lipirea unui token de producție activ într-un decodor online extern este un risc de securitate: dacă `exp` token-ului este încă în viitor și serviciul înregistrează intrarea, sesiunea pe care o reprezintă poate fi compromisă.

Instrumentele folosite în acest ghid

Întrebări frecvente

Tokenul meu este trimis către vreun server când îl decodez?

Nu. Decodorul împarte tokenul, decodează antetul și sarcina utilă cu Base64Url și le afișează în memorie. Verificarea HMAC opțională folosește API-ul Web Crypto încorporat în browserul tău. Nimic nu trece prin rețea, iar acest lucru contează deoarece un JWT conține adesea date personale și o sesiune încă activă. Deschide panoul de rețea al browserului în timp ce decodezi și nu vei vedea nicio cerere ieșind.

Poate acest instrument verifica o semnătură RS256 sau ES256?

Nu pe deplin și nu se va preface. HS256 folosește un singur secret partajat atât pentru semnare, cât și pentru verificare, așa că lipirea acelui secret permite instrumentului să confirme semnătura în browserul tău. RS256 și ES256 folosesc o cheie privată pentru semnare și o cheie publică separată pentru verificare; instrumentul citește și validează revendicările și expirarea, dar se oprește înainte de a afirma o semnătură pe care nu o poate verifica. Pentru acele tokenuri, verifică pe serviciul care deține cheia publică.

Surse