Skip to content

Decode a JWT

See the header, the claims and the expiry of a JSON Web Token. A token is a working credential, so this one runs entirely on your own device — nothing is sent anywhere, ever.

  • Processed on your device
  • No upload, no waiting
  • No signup, no watermark

Your token never leaves this page. It is decoded here, in your browser, with no request to any server — which matters, because a JWT is usually a working credential. Open your browser's Network tab and watch: nothing is sent.

The “Bearer ” prefix is fine — it is ignored.

How it works

1

Paste the token

With or without the "Bearer " prefix. It stays in this page; no request is made.

2

Read the three parts

Header, payload and signature, each decoded and formatted. Timestamps become real dates and you are told how long is left.

3

Check the warnings

Expired tokens, missing expiry, the "none" algorithm and other problems are called out with what they mean.

Frequently asked questions

Is my token sent anywhere?

No — and for this page that is the entire point rather than a feature. A JWT is usually a live credential: whoever holds it can act as you until it expires. Pasting one into an online decoder that posts it to a server hands over a working key, and no promise about not logging can undo that. This decoder is plain JavaScript in the page you are looking at. Nothing is uploaded, nothing is logged, no request is made. Yes. Once the page has loaded, turn off your Wi-Fi and it works exactly the same. That is the simplest way to confirm the privacy claim for yourself rather than taking our word for it — and with the developer tools open on the Network tab, you can watch that nothing is sent.

Does this verify the signature?

No, and no online decoder honestly can without your signing key. Decoding and verifying are completely different operations. Decoding just un-Base64s the token — anyone can do it to any token, and it proves nothing at all about whether the token is genuine. Verifying means recomputing the signature with the secret or public key that signed it, and that key should never be pasted into a website. What you see here is what the token CLAIMS. Whether those claims are trustworthy is a question only your server, holding the key, can answer.

Can someone read a JWT I send them?

Yes — completely, and this catches people out. A JWT is signed, not encrypted. The header and payload are Base64, which is an encoding with no secret in it, so anyone who intercepts the token can read every claim inside it. The signature stops them CHANGING the token; it does nothing to stop them READING it. Never put anything confidential in a JWT payload: no passwords, no card numbers, no personal data you would not put on a postcard.

What does the "none" algorithm warning mean?

That the token says it is unsigned, and it is one of the most serious findings this page reports. `alg: none` is a documented authentication bypass: an attacker takes a real token, changes the payload to say they are an administrator, sets the algorithm to "none", removes the signature, and a library that trusts the header accepts it. Every serious JWT library now blocks this by default, but implementations that trust `alg` still exist. A token arriving with `alg: none` should be treated as an attack until proven otherwise.

How do I read the expiry?

It is done for you. `exp`, `iat` and `nbf` are Unix timestamps — seconds since 1970 — which are unreadable as raw numbers. Each is shown as a real date in your own timezone, with how long ago or how long from now, and an expired token is stated plainly rather than left for you to work out. A token with no `exp` at all is flagged too: a JWT that never expires cannot be revoked by expiry, and stays valid for as long as the signing key does.

My token has five parts, not three

Then it is a JWE — encrypted rather than merely signed — and its contents genuinely cannot be read without the decryption key. The page recognises the shape and tells you so instead of showing you nonsense. Five parts means the payload is real ciphertext; there is nothing to decode.

What are the standard claims?

The registered ones are: `iss` who issued it, `sub` who it is about (usually a user ID), `aud` who it is for, `exp` when it expires, `nbf` not valid before, `iat` when it was issued, and `jti` a unique ID for the token. Everything else is custom to whoever built the system. Each registered claim is labelled with its meaning in the output, so you do not need to remember which three-letter abbreviation is which.