JWT Decoder
Read a JSON Web Token header, payload and expiry safely.
Pasted tokens are decoded in this tab only. Nothing is transmitted — but treat any token you paste anywhere as compromised and rotate it if it is a live credential.
—
—
Claims
| Claim | Value | Meaning |
|---|
Verify an HMAC signature
For HS256, HS384 and HS512 tokens only. RSA and ECDSA signatures (RS*, ES*, PS*) need the issuer's public key and are not checked here.
What a JWT is
A JSON Web Token is three Base64url segments joined by dots: header.payload.signature. The header names the signing algorithm, the payload carries the claims — who the user is, when the token expires, what it is allowed to do — and the signature proves the first two parts were not altered after the issuer created them.
The crucial property is that the payload is encoded, not encrypted. Anyone holding the token can read every claim inside it, exactly as this page does. That is by design and it is why a JWT must never contain a password, a card number or anything else you would not put in a URL.
Reading the standard claims
iss— issuer, who created and signed the token.sub— subject, usually the user ID the token is about.aud— audience, the service that is meant to accept it. Verifying this stops a token for one API being replayed against another.exp— expiry, as a Unix timestamp. After this instant the token must be rejected.nbf— not before; the token is invalid until this time.iat— issued at, when the token was created.jti— a unique token ID, used to revoke or de-duplicate individual tokens.
How to use it
- Paste a token. The header and payload decode immediately and the timestamp claims are rendered as readable dates.
- Check the status line for expiry — an expired token is the single most common cause of a sudden 401.
- If the token is HMAC-signed and you hold the secret, paste it into the verify box to confirm the signature is genuine.
Frequently asked questions
Is my token sent to a server?
No. Decoding is a Base64url conversion performed in this page, and HMAC verification uses the Web Crypto API locally. That matters: pasting a live access token into a hosted debugger hands a working credential to whoever runs it.
Can I decode a token without the secret?
Yes, always — that is what this tool does. The secret is only needed to confirm that the token has not been tampered with. Reading the claims requires nothing at all, which is precisely why sensitive data must not go inside them.
What is the “alg: none” vulnerability?
Early JWT libraries honoured a header claiming the algorithm was none and skipped signature checking entirely, letting anyone forge a token. Correct implementations pin the expected algorithm on the server and refuse anything else. If you see none in a real token's header, treat it as an attack.
Why is my token rejected even though it looks fine?
In order of likelihood: it has expired; the clock on your machine differs from the server's by more than the allowed skew; the aud claim names a different service; or the signing key was rotated. The status line above resolves the first two immediately.
How do I invalidate a JWT before it expires?
You cannot, without extra machinery — that is the main trade-off of stateless tokens. The usual answers are short expiry times with refresh tokens, or a server-side deny-list keyed on jti. Both reintroduce some state, which is the price of revocation.