Developer

JWT Decoder

Read the header, claims and expiry of a JWT in your browser. Decodes only β€” it cannot verify a signature.

Runs entirely in your browser. Nothing you paste is uploaded.

This decodes a token. It does not verify one.

A JWT's contents are encoded, not encrypted β€” anyone holding the token can read them, which is all this page does. Whether the token is genuine is decided by its signature, and checking that needs the issuer's secret or public key. Only your server has those, so no browser tool can tell you a token is authentic.

Decoding happens on your device and nothing is sent to us. Even so, treat a token you paste anywhere as one that should be rotated β€” it will sit in your clipboard and your browser history.

0 characters Β· 0 bytes

Paste the token, with or without a Bearer prefix.

This runs entirely in your browser. Nothing you paste is sent to us or to anyone else.

How to use it

  1. Paste your text into the box marked "JWT"Paste the whole token, including both dots. Everything happens inside your browser β€” nothing is uploaded, so there is nothing for us to store, log or lose.
  2. Read the result as it updatesThere is no button to press. The header and payload decode immediately. The output recomputes every time you change the text or one of the options above it.
  3. Read the header and the claims separatelyThe header says which algorithm signed it. The payload holds the claims β€” who the token is for, what it permits, and when it expires. Standard claims are labelled, because iat, nbf and exp are not obvious.
  4. Check the expiryexp and nbf are shown as readable dates. An expired token is the first thing to rule out when a request that used to work has started returning 401.
  5. Understand that the signature is NOT verifiedVerifying it needs the secret or public key, and pasting a signing secret into a web page is a bad habit to build even on a tool that runs locally. Decoding proves what a token says, never that it is genuine.
  6. Treat a decoded token as still sensitiveNothing is uploaded here β€” but a JWT from a live system is a working credential until it expires, and it should be treated like a password wherever it goes next.
  7. Copy or download the resultThe buttons under the output put it on your clipboard or save it as a file, and each one says exactly what it will copy or download. Any note about something the tool changed or deliberately left alone is shown with the result rather than hidden.

About this tool

A JSON Web Token carries a header, a set of claims and a signature, joined by full stops. The header and claims are Base64url β€” encoded, not encrypted β€” so anyone holding the token can read them. That is what this tool does: it shows you what is inside.

It does not verify the signature, and it will never tell you a token is valid. Verification requires the issuer's secret or public key, which lives on your server and should not be pasted into a web page. A tool that showed a green tick because the JSON parsed would be teaching people to trust a forged token.

Understanding the result

The registered claims are explained where they appear: iss is the issuer, aud is who the token is for, exp is when it should stop being accepted. Custom claims are shown as they are, without a guess at their meaning.

exp, nbf and iat are spelled out as real dates with a relative description. An expired token is described as expired β€” which is what the token claims, not a statement that any particular server would reject it.

Security observations always include the line that the signature was not checked. alg "none", an empty signature and a key embedded in the header are called out specifically, because each is the basis of a known attack.

Example

Input

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.…

Output

alg: HS256
sub: 1234567890 β€” Subject, who or what the token is about
β–² The signature was NOT checked.

Limitations

  • The signature is not verified and cannot be. A token whose claims read perfectly may be entirely forged.
  • An encrypted token β€” a JWE, in five parts β€” cannot be read at all without the decryption key. The tool says so rather than failing obscurely.
  • Expiry is what the token asserts. A server that does not verify signatures would accept a forged token with any expiry at all, so "not expired" is not a statement about access.
  • Decoding happens on your device, but a token you paste anywhere still ends up in your clipboard and your browser history. Treat a pasted production token as one to rotate.

Questions

Is my token sent to your server?

No. Decoding is Base64 and JSON parsing on your device; there is no request to make. That said, the safest habit with any live token is to assume that pasting it anywhere means rotating it afterwards.

Can you tell me whether my token is valid?

No, and no browser tool can. Validity means the signature matches, and checking it needs the issuer's secret or public key. Any site offering to verify a token is asking you to hand over that key.

My token decodes but my API rejects it. Why?

Usually one of four things: it has expired, the audience does not match the service, the signature was made with a different key, or the server clock differs from the issuer's and a not-before claim has not yet come round.

What does alg "none" mean?

An unsecured token with no signature at all. It is legal in the specification and dangerous in practice: a library that honours the header's choice of algorithm can be handed a token with the signature stripped and the algorithm changed to "none". Servers must pin the algorithm they expect.

Last updated 2026-08-16.

Related tools