How to Decode a JWT Online Free (No Upload)

TL;DR

Paste any JWT into a client-side decoder — the token is split on its two dots, the header and payload are base64url-decoded into JSON, and the time claims (exp, iat, nbf) are converted to readable dates. No secret key is needed to decode, and a trustworthy decoder never uploads your token anywhere. Decoding reads the token; only your server can validate it.

JSON Web Tokens are everywhere in modern development — login flows, API gateways, OAuth, microservices — and sooner or later you will stare at one and wonder what is inside. A JWT looks like random noise, but its contents are an open book by design. This guide shows you how to decode a JWT in seconds, what each part means, which claims to check first, and the safety rules that matter when real tokens cross your screen.

Decode a JWT in 3 steps

  1. Open ToolsOfWeb's JWT Decoder and paste the token into the text area. It decodes instantly as you type.
  2. Click the header, payload, or signature segment to highlight each part. The header shows the signing algorithm; the payload shows every claim as formatted JSON.
  3. Check the registered-claims table: expiry (exp) gets a valid/expired badge with a human-readable date, so you can see at a glance whether the token is still alive.

Everything runs in your browser. The token is never sent to a server, stored, or logged — you can even disconnect from the network after the page loads and decoding still works.

What is a JWT?

A JSON Web Token (RFC 7519) is a compact, URL-safe way to represent claims between two parties. After you log in, the server mints a token and hands it to your app; your app then attaches it to every API request (usually in the Authorization: Bearer header). The API verifies the token’s signature and trusts the claims inside — no database lookup needed per request. That statelessness is why JWTs power so much of the modern web.

The trade-off is that a valid token is the credential. Unlike a session cookie tied to server-side state, a JWT cannot be easily revoked before it expires — which is exactly why short lifetimes and the exp claim matter so much.

Anatomy: header, payload, signature

A JWT is three base64url strings joined by dots: header.payload.signature. The header is a tiny JSON object naming the algorithm (alg, e.g. HS256 or RS256) and the type (typ: JWT). The payload holds the claims — the meaningful data. The signature is produced by signing the first two segments with the server’s secret key, which is what makes tampering detectable.

Here is the part most developers learn the hard way: the payload is signed, not encrypted. Base64url decoding is trivial — anyone who gets hold of the token can read every claim. So the payload should carry identifiers and metadata (user ID, roles, expiry), never passwords, API secrets, or sensitive personal data.

Registered claims cheat sheet

RFC 7519 defines seven registered claims. You will not see all of them in every token, but when they appear, this is what they mean:

ClaimNameWhat it means
issIssuerWho created the token (e.g. your auth server’s URL)
subSubjectWho the token is about — usually the user ID
audAudienceWho the token is intended for (your API or app ID)
expExpiration timeUnix timestamp after which the token must be rejected
nbfNot beforeUnix timestamp before which the token is not valid
iatIssued atUnix timestamp of when the token was minted
jtiJWT IDUnique token identifier — used to prevent replay

Anything else in the payload is a private claim — custom data your auth server adds, like roles, email, or tenant_id. Decoders show these as-is; their meaning is defined by whoever issued the token.

Is it safe to paste a JWT into an online decoder?

With a properly built client-side decoder: yes. Decoding needs no secret and no server — it is pure string manipulation your browser can do offline. The risk is not the decoding, it is where the token goes. A shady site could exfiltrate pasted tokens, and a valid token is a working credential. So use decoders that state plainly that nothing is uploaded (like the one linked in this guide), prefer tokens from staging or local environments when debugging, and never paste production tokens into chat apps, tickets, or forums.

Common gotchas

  • Expired but “just issued”: check for clock skew between the issuer and your machine, and confirm the timestamps are in seconds, not milliseconds — a millisecond exp looks like a date 50,000 years in the future.
  • alg: none: an unsigned token. Fine for local experiments, never acceptable in production — a server that accepts it will accept a token anyone forged.
  • Base64 vs base64url: JWT uses the URL-safe alphabet (- and _ instead of + and /, no padding). A generic base64 decoder may choke on real tokens.
  • Decoded ≠ valid: a decoder reads claims; it does not verify the signature or enforce exp/aud/iss. Validation is your server’s job.

FAQs

Can I decode a JWT without the secret key?+

Yes. The header and payload are only base64url-encoded, not encrypted, so anyone can decode them. The secret key is only needed to verify the signature — decoding never requires it.

Why is my JWT payload readable by anyone?+

Because JWTs are signed, not encrypted. Base64url is an encoding anyone can reverse. Never put passwords, PII, or secrets in a JWT payload — if it must stay secret, use JWE (encrypted JWT) instead.

What should I do if the decoder says "alg: none"?+

Treat it as a red flag. An unsigned token has no signature, so anyone can forge it. Never configure a production server to accept alg:none tokens.

How long should a JWT live?+

Access tokens are typically short-lived — 15 minutes to a few hours. Short lifetimes limit the damage if a token leaks. Use rotating refresh tokens for long sessions instead of stretching access-token expiry.

Does decoding a JWT validate it?+

No. Decoding only reads the claims. Validation means checking the signature with the secret key, plus enforcing exp, nbf, iss, and aud — that happens on your server, never in a decoder.

Ready to inspect a token? Try the free JWT Decoder — paste any token and see its claims instantly, with nothing uploaded. For more developer utilities, see the JSON Formatter and Base64 Converter.