CodeKitHub
Instrumente de codificare

Decodor JWT

Ultima actualizare:

Lipește orice JWT (JSON Web Token) și vezi instant header-ul și payload-ul decodate și formatate — inclusiv dacă a expirat. Totul se întâmplă în browserul tău: tokenul nu este trimis nicăieri, iar semnătura nu este verificată (acest instrument doar decodează, nu verifică dacă tokenul este autentic).

Header

Payload

Decoded entirely in your browser — no signature verification, and the token is never sent anywhere.

Ce este acest instrument?

Un JWT (JSON Web Token) este un șir compact, sigur pentru URL, folosit pentru a transporta claims între două părți — cel mai adesea ca token de autentificare după conectare. Are trei părți separate prin puncte: un header (algoritm și tip de token), un payload (claims-urile propriu-zise — ID utilizator, roluri, expirare etc.) și o semnătură (folosită de server pentru a verifica dacă tokenul nu a fost modificat).

Header-ul și payload-ul sunt doar JSON codat Base64URL — nu criptat — așa că oricine poate să le decodeze și să le citească fără o cheie secretă. Doar semnătura necesită o cheie secretă pentru verificare. Exact asta face acest instrument: decodează părțile care pot fi citite și le afișează ca JSON formatat, fără să încerce să verifice semnătura.

JWT-urile sunt standardizate în RFC 7519, iar stratul de semnătură (JWS) este definit separat în RFC 7515 — referințe utile atunci când ai nevoie de lista oficială a claims-urilor înregistrate, precum exp, iat, sub și aud.

De ce să-l folosești?

  • Header și payload instant lizibile, formatate ca JSON — nu mai trebuie să împarți manual șirul și să decodezi Base64 cu mâna.
  • Verificare automată a expirării: dacă payload-ul are un claim „exp”, este convertit într-o dată lizibilă și marcat ca expirat sau valid.
  • Copiere cu un click, separat pentru header sau payload.
  • 100% local — tokenul este decodat local și nu este niciodată transmis, sigur de folosit chiar și cu tokenuri dintr-un sistem de producție.
  • Nu se efectuează și nu se pretinde nicio verificare de semnătură — acesta este un instrument de depanare/inspecție, nu un validator.

Cum se folosește

  1. Lipește JWT-ul tău în câmp (șirul complet, cu toate cele trei părți separate prin puncte).
  2. Header-ul și payload-ul se decodează automat pe măsură ce scrii.
  3. Verifică linia de expirare dacă tokenul are un claim „exp” — arată data exactă și dacă tokenul a expirat.
  4. Apasă „Copiază” sub oricare dintre câmpuri pentru a copia acea secțiune ca JSON.

Exemplu

Intrare

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0IiwibmFtZSI6IkpvaG4gRG9lIiwiZXhwIjoxNzAwMDAwMDAwfQ.dQw4w9WgXcQ

Rezultat

Header: {"alg": "HS256"}
Payload: {"sub": "1234", "name": "John Doe", "exp": 1700000000}

Semnătura (a treia parte) nu este niciodată decodată sau verificată — este un hash opac folosit pe server pentru a verifica autenticitatea.

Sfaturi practice

  • Depanarea erorilor „token invalid”: decodează întâi payload-ul pentru a verifica claim-ul „exp” — un token expirat este cea mai frecventă cauză, și nu este mereu evident doar din mesajul de eroare.
  • Verificarea a ceea ce conține de fapt tokenul unui API terț: multe API-uri returnează un JWT aparent opac ca token de acces — decodează-l aici pentru a vedea scope-urile, ID-ul utilizatorului sau expirarea pe care le primește de fapt integrarea ta.
  • Nu presupune niciodată că un JWT este criptat: dacă vezi date sensibile (email, ID-uri interne) într-un payload decodat în timpul dezvoltării, este un semnal să muți acele date pe server, nu să te bazezi pe faptul că clientul nu le va citi.

Claims frecvente pe care le vei vedea într-un payload

ClaimSemnificație
subSubject — de obicei ID-ul utilizatorului reprezentat de token
expTimp de expirare (timestamp Unix) — tokenul devine invalid după acest moment
iatIssued at — momentul la care a fost creat tokenul
issIssuer — ce serviciu/server a emis tokenul
audAudience — pentru ce serviciu este destinat tokenul
role / roles / scopeClaims personalizate — permisiuni sau roluri acordate utilizatorului (nu fac parte din standardul JWT, dar sunt extrem de comune)

Întrebări frecvente

Acest instrument verifică semnătura JWT-ului?

Nu. Verificarea unei semnături necesită cheia secretă sau cheia publică folosită la semnarea tokenului, pe care doar serverul emitent o deține. Acest instrument decodează doar header-ul și payload-ul — părțile care pot fi citite — astfel încât să poți inspecta claims-urile și expirarea fără să ai nevoie de nicio cheie.

Este sigur să lipesc aici un JWT real din producție?

Decodarea are loc complet în browserul tău, prin JavaScript — tokenul nu este trimis niciodată către niciun server, inclusiv al nostru. Totuși, tratează tokenurile ca pe parole: nu le lipi în instrumente în care nu ai încredere și evită să distribui capturi de ecran cu tokenuri decodate care conțin claims sensibile.

De ce oricine poate citi payload-ul JWT-ului meu fără parolă?

Așa este proiectat — header-ul și payload-ul unui JWT sunt codate Base64URL, nu criptate. Codarea nu înseamnă securitate; face doar ca JSON-ul să fie sigur pentru transmitere prin URL. Nu pune niciodată date secrete (parole, numere de card) direct în payload-ul unui JWT — presupune că oricine deține tokenul îi poate citi conținutul.

Ce înseamnă claim-ul „exp” și de ce contează?

„exp” este momentul de expirare al tokenului, ca timestamp Unix (secunde de la 1970). Serverele resping un JWT după ce acest moment a trecut, forțând clientul să se autentifice din nou. Acest instrument îl convertește într-o dată lizibilă și marchează dacă a expirat deja, ceea ce este util pentru a depana probleme de tipul „de ce am fost delogat”.

Tokenul meu afișează o eroare de parsare JSON — de ce?

Fie șirul nu este un JWT valid (ar trebui să aibă exact trei părți separate prin puncte), fie a fost trunchiat sau modificat — o cauză frecventă este un token divizat accidental pe mai multe linii sau cu caractere finale lipsă în urma copierii.

Instrumente similare