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.