JWT → header + claims

JWT decoder

Read a token's header and payload, see every claim with its time, and get a straight answer about what this page does not verify.

Three dot-separated segments. A leading “Bearer ” is ignored.

The token is decoded in this tab with local Base64URL and JSON parsing. It is never uploaded, logged or sent to a verification endpoint — which is also why the signature cannot be checked here.

Short answer: paste the token and the header, payload and claim times appear as you type. This page decodes; it cannot verify, because verification needs the issuer's key. The warnings list says what the token claims — signed with alg: none, already expired, missing exp, or an empty signature.

What decoding proves, and what it does not

A JWT is three Base64URL segments: a header, a payload and a signature. Decoding the first two needs no key at all — they are plain JSON encoded for transport, not encrypted. That means the contents of a token are readable by anyone who holds it, including a browser extension, a log aggregator or a screenshot.

Only the signature ties the contents to the issuer. It is computed over the first two segments with the issuer's key, and checking it requires that key or its public half plus the algorithm the issuer chose. This tool has neither, so it never displays "valid" — a status it could not honestly earn.

Reading the claims table

Custom claims are shown too, decoded exactly as they appear. Nothing is renamed or dropped, so what you read is what the issuer put there.

Common JWT mistakes this page surfaces

JWT decoding questions

Does this tool verify the token signature?

No, and it says so on the result. Verifying a signature needs the issuer's key or secret, which a browser tool does not have. Decoding only proves the token is well-formed Base64URL containing JSON. Anyone can craft such a token, so never treat a decoded token as authentic.

What do exp, iat and nbf mean?

exp is the expiry time: the token must not be accepted at or after it. iat is when the issuer created it. nbf is "not before": the token must not be accepted earlier. All three are Unix seconds, and the claim table converts them to an ISO timestamp with the distance from now.

Why is my token expired but the site still accepts it?

Either the server is not checking exp, or the clock is skewed, or the value is in a different unit. A server that ignores exp is a bug on the server side; this page reports what the token actually claims, not what the server does.

What does alg: none mean?

It means the token is unsigned — the header says no signature is needed. Accepting such a token would let anyone change the payload. The decoder flags it as a warning, because the three-segment shape looks identical to a signed token.

Can it decode an encrypted token?

No. A JWE has five segments and its payload is ciphertext; without the key there is nothing to read. The tool recognises the five-segment shape and explains it instead of failing with a generic parse error.

Is it safe to paste a real token here?

The token is decoded in this tab and never uploaded: there is no endpoint to send it to. Even so, a token is a live credential until it expires — prefer a test token, and revoke anything you pasted into a tool you do not trust.

Related tools