Unealtă gratuită pentru programatori

Decodor JWT online

Lipești un token JWT și vezi antetul și conținutul ca JSON, explicația revendicărilor standard și datele de emitere și expirare în ora României. Tokenul nu pleacă din browser.

Exemple de tokenuri JWT

Variante gata făcute: copiază codul direct sau deschide exemplul în generator și modifică-l după nevoie.

Tokenul demonstrativ Semnat cu HS256 și secretul secret-demo; are doar sub, name și iat.
{
  "alg": "HS256",
  "typ": "JWT"
}
{
  "sub": "1234567890",
  "name": "Ion Popescu",
  "iat": 1767225600
}
Token cu toate revendicările iss, aud, nbf, exp și jti: tokenul a expirat la o oră după emitere.
{
  "iss": "https://auth.exemplu.ro",
  "sub": "1234567890",
  "aud": "api.exemplu.ro",
  "name": "Ion Popescu",
  "roluri": [
    "editor"
  ],
  "iat": 1767225600,
  "nbf": 1767225600,
  "exp": 1767229200,
  "jti": "demo-001"
}
Citirea conținutului din cod Doar decodare, fără verificare: potrivit pentru afișare, niciodată pentru a decide accesul.
// Browser (cu diacritice corecte)
const b64 = token.split(".")[1].replace(/-/g, "+").replace(/_/g, "/");
const bytes = Uint8Array.from(atob(b64), c => c.charCodeAt(0));
const payload = JSON.parse(new TextDecoder().decode(bytes));

// Node.js
JSON.parse(Buffer.from(token.split(".")[1], "base64url").toString());

# Python
p = token.split(".")[1]
p += "=" * (-len(p) % 4)
json.loads(base64.urlsafe_b64decode(p))
Verificarea pe server Algoritmul acceptat se fixează explicit, ca un token cu alg none sau alt algoritm să fie respins.
// Node.js – jsonwebtoken
const date = jwt.verify(token, process.env.JWT_SECRET, { algorithms: ["HS256"] });

// PHP – firebase/php-jwt
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
$date = JWT::decode($token, new Key($secret, 'HS256'));

Cum folosești decodorul JWT

  1. Lipește tokenul în câmpul Tokenul JWT. Merge și cu Bearer în față, copiat dintr-un antet HTTP.
  2. Citește antetul și conținutul decodate în caseta de jos și tabelul cu revendicările standard: iss, sub, aud, exp, nbf, iat, jti.
  3. Pentru tokenurile semnate cu HS256, HS384 sau HS512 poți scrie secretul în câmpul Secret pentru o verificare de test.

Decodarea și verificarea se fac în browser; tokenul și secretul nu se trimit nicăieri. Chiar și așa, nu lipi tokenuri de producție pe site-uri în care nu ai încredere: cine are tokenul îl poate folosi până expiră.

Ce este un JWT

Un JWT are trei bucăți separate prin punct: antetul, conținutul și semnătura. Primele două sunt doar JSON codat Base64URL, nu criptat. Oricine are tokenul îi poate citi conținutul, deci nu pune acolo parole sau date sensibile.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9   ->  {"alg":"HS256","typ":"JWT"}
eyJzdWIiOiIxMjM0NTY3ODkwIiwi...       ->  {"sub":"1234567890","name":"Ion Popescu",...}
UeEl2VHJdD76QpA1xDJt0K987_x8...       ->  semnătura (octeți)

Exemplul din unealtă este un token demonstrativ, semnat cu secretul secret-demo.

Decodat nu înseamnă verificat

Decodorul nu știe dacă tokenul e autentic. Semnătura se verifică pe server, cu secretul comun (algoritmii HS) sau cu cheia publică a emitentului (RS, PS, ES, EdDSA). Serverul trebuie să fixeze singur algoritmul acceptat și să respingă alg: none.

// Node.js, cu biblioteca jsonwebtoken
const date = jwt.verify(token, secret, { algorithms: ["HS256"] });

Datele din token

exp, nbf și iat sunt secunde de la 1 ianuarie 1970, ora UTC. Unealta le arată în ora României și spune dacă tokenul a expirat sau când expiră. Dacă vezi un an absurd, valoarea a fost scrisă probabil în milisecunde.

Întrebări frecvente

Pot modifica tokenul aici?

Poți schimba conținutul, dar semnătura nu se va mai potrivi, iar un server corect va respinge tokenul. Exact asta este rolul semnăturii.

Ce este un token cu 5 bucăți?

Este un JWE, un token criptat. Fără cheia de decriptare se poate citi doar antetul.