Exemple de tokenuri JWT
Variante gata făcute: copiază codul direct sau deschide exemplul în generator și modifică-l după nevoie.
{
"alg": "HS256",
"typ": "JWT"
}
{
"sub": "1234567890",
"name": "Ion Popescu",
"iat": 1767225600
}
{
"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"
}
// 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))
// 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
- Lipește tokenul în câmpul Tokenul JWT. Merge și cu
Bearerîn față, copiat dintr-un antet HTTP. - Citește antetul și conținutul decodate în caseta de jos și tabelul cu revendicările standard:
iss,sub,aud,exp,nbf,iat,jti. - 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.