TessaCodeTools

Free Online JWT Decoder

Read the header, payload, and expiry of any JSON Web Token, and optionally verify an HS256 signature with your shared secret. Everything happens in this tab, so the token never leaves your machine.

decoded in this tab · your token is never sent anywhere

header·payload·signature

HMAC is checked locally with the Web Crypto API. RS and ES tokens need the issuer's public key, which would mean leaving your device.

decodedunexpired
HS256typ JWTkid key-1

Symmetric algorithm: whoever can verify this token can also mint new ones.

issuerhttps://auth.tessacode.dev
subjectuser_9f2b
audienceapi, web
token ide8a1-4c77
issued at2025-09-11 14:42:00 UTC · 1.0 years ago
expires2100-01-01 00:00:00 UTC · in 73.4 years
2 custom claimsrole, email
header
{
  "alg": "HS256",
  "typ": "JWT",
  "kid": "key-1"
}

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImtleS0xIn0

payload
{
  "iss": "https://auth.tessacode.dev",
  "sub": "user_9f2b",
  "aud": [
    "api",
    "web"
  ],
  "iat": 1757601720,
  "exp": 4102444800,
  "jti": "e8a1-4c77",
  "role": "admin",
  "email": "nick@tessacode.dev"
}

eyJpc3MiOiJodHRwczovL2F1dGgudGVzc2Fjb2RlLmRldiIsInN1YiI6InVzZXJfOWYyYiIsImF1ZCI6WyJhcGkiLCJ3ZWIiXSwiaWF0IjoxNzU3NjAxNzIwLCJleHAiOjQxMDI0NDQ4MDAsImp0aSI6ImU4YTEtNGM3NyIsInJvbGUiOiJhZG1pbiIsImVtYWlsIjoibmlja0B0ZXNzYWNvZGUuZGV2In0

signature

2FLApulTHtgU6ay9HxSC_AKDWS1Jhdsz29xn05_xGBw

What is inside a JWT

A JSON Web Token is three base64url-encoded strings joined by dots. The header says which algorithm signed it and, often, which key was used. The payload carries the claims: who the token is about, who issued it, when it expires, plus whatever application data the issuer chose to include. The signature is a cryptographic hash over the first two parts, and it is the only thing standing between a real token and a forged one.

The critical point, and the one most often misunderstood: a JWT is encoded, not encrypted. Anyone holding the token can read every claim in it without any key at all, which is exactly what the decoder above does. Never put a password, a private key, or anything else sensitive in a payload.

Decoding is not verifying

Reading a token tells you what it claims. Verifying it tells you whether to believe those claims. They are entirely separate operations, and conflating them is the root of most JWT vulnerabilities.

Verification means recomputing the signature and checking that the expected value matches. With HMAC algorithms (HS256, HS384, HS512) the signer and verifier share one secret, so this page can do the check locally once you supply it. With RSA and ECDSA (RS256, ES256) the token is verified using the issuer's public key, which normally requires fetching a JWKS document. That would mean sending your token somewhere, so this tool declines rather than compromise the privacy guarantee.

The claims that matter

Seven claim names are registered by the spec, and each is aexp-style three-letter abbreviation:iss(issuer),sub(subject),aud(audience),exp(expiry),nbf(not before),iat(issued at), andjti(token id). All three time claims are Unix timestamps in seconds, not milliseconds, which is a reliable source of off-by-1000 bugs.

The decoder above resolves those timestamps to readable dates and tells you how long until expiry, flagging anything inside five minutes. It also separates registered claims from custom ones, since custom claims are usually where the roles and permissions your application actually cares about live.

Three ways JWT auth goes wrong

Trusting the header. If your verifier readsalgout of the token and uses whatever it finds, an attacker can set it tonone, strip the signature, and walk in. Pin the expected algorithm in your server config.

Long expiry windows. A JWT cannot be revoked, because verification is offline by design. A token valid for thirty days is a thirty-day breach if it leaks. Keep access tokens to minutes and use refresh tokens for longevity.

Storing them in localStorage. Any cross-site scripting flaw on your domain can read localStorage and exfiltrate the token. An httpOnly, secure, SameSite cookie is not reachable from JavaScript at all.

Frequently asked questions

Is it safe to paste a production token here?+

Yes. Decoding and signature verification both run in your browser with the Web Crypto API, and nothing is transmitted or logged. That said, a token in your clipboard is still a live credential, so treat it accordingly.

Does decoding a JWT mean it is verified?+

No, and this trips people up constantly. The header and payload are only base64url-encoded, not encrypted, so anyone can read them without a key. Verification is a separate step that checks the signature, and only that step tells you the token is authentic.

Why can you verify HS256 but not RS256?+

HMAC algorithms sign and verify with the same shared secret, so if you have it, the check can happen locally. RS and ES tokens are verified with the issuer's public key, which normally means fetching a JWKS endpoint. That would send data off your device, so this tool does not do it.

Can I edit a payload and re-sign the token?+

Not here, deliberately. This is a read-only decoder. Minting tokens belongs in your auth service, where the signing key lives.

What does alg: none mean?+

It declares an unsigned token. Historically, libraries that trusted the header would accept a forged token with the signature stripped and alg set to none. Always pin the expected algorithm server-side rather than reading it from the token.