Send feedback

Coming from the page: JWT Decoder

One moment…

Token stays on your pageReadable datesSignature check

JWT Decoder

Paste a token to read what’s inside, when it expires, and whether its signature is valid.

The token and keys stay on this page: decoding and verification run in your browser and nothing is sent to any server.

How to use it

1

Paste the token

From an Authorization: Bearer … header or your dev tools; the word Bearer is removed for you.

2

Read the claims

Header and payload are formatted, and dates like exp are shown with the time left.

3

Verify

Enter the secret (HS256) or public key (RS256 and others) to confirm the token wasn’t changed.

Common claims

ClaimMeaning
expExpiry time (seconds since 1970)
iatIssued at
nbfNot valid before
subSubject, usually the user ID
issIssuer
audIntended audience
jtiUnique token ID

Good to know

A JWT isn’t encrypted. The payload is only Base64URL-encoded; anyone with the token can read it. Never put passwords or secrets in it.

The signature prevents tampering. It proves the content hasn’t changed since the server issued it; it doesn’t hide it.

Beware alg: none. An unsigned token must always be rejected by servers; we warn you when we see one.

FAQ

Is it safe to paste my token here?

Yes. Decoding and verification happen entirely in your browser; the token and key are never sent to any server. Still, a live token works like a temporary password, so don’t share it.

How do I know if a token has expired?

From exp: we show it as a date and time in UTC and your local time, with “expired … ago” or “expires in …”.

Why “invalid signature”?

Either the key isn’t the one the server signed with (check the Base64 option for secrets), or the header or payload was changed after signing.

Where do I get the public key?

Usually from the issuer’s JWKS URL, like /.well-known/jwks.json. Paste the whole thing and we pick the key by kid.