Developer Tools

JWT Decoder & Expiry Checker

Paste a JSON Web Token to read its header and claims, see a live countdown to when it expires, and optionally verify the signature. Decoding happens locally in your browser — the token is never sent anywhere, so it's safe to use with real tokens.

JWT Decoder

Free · No sign-up
Loading tool…

Decode a JWT without the secret

A JWT's header and payload aren't encrypted — they're just base64url-encoded JSON. That means you can read them without any secret or key, which is exactly what this decoder does. Paste the token and you'll see who it belongs to (sub), who issued it (iss), what it's for (aud) and any custom claims like email or role.

Reading a token is not the same as trusting it, though. Anyone can create a token with “role: admin” in it. Only the signature proves it came from your server — see “Verify the signature” below.

Check JWT expiration at a glance

The exp claim is a Unix timestamp, which isn't easy to read. This tool turns it into your local date and time and shows a live countdown: “Expires in 14 min 32 s”, “Expired 3 days ago”, or “Not valid yet” when the nbf (not before) time is still in the future.

Getting a “jwt expired” error from your API? Paste the token here to see exactly when it expired and compare it with your server's clock.

Verify the signature

To confirm a token is genuine, paste the shared secret (for HS256, HS384, HS512) or the issuer's public key in PEM format (for RS256, PS256 or ES256 and their 384/512 variants). Verification uses your browser's built-in Web Crypto API.

It also flags tokens with “alg: none” — unsigned tokens that anyone could forge — and recognises encrypted tokens (JWE), which can't be read without the decryption key.

Why decoding locally matters

A live access token is effectively a password. Pasting it into a site that sends it to a server is a real risk. This decoder works offline once the page has loaded: no request carries your token, your secret or your key. Open your browser's Network tab while you use it if you'd like to check.

Frequently asked questions

Can you decode a JWT without the secret?

Yes. The header and payload are only base64url-encoded, so anyone can read them without the secret. The secret or public key is only needed to verify the signature.

How do I check when a JWT expires?

Paste it here. The exp claim is shown as your local date and time, with a live countdown until it expires (or how long ago it did).

Is it safe to paste a real token here?

Yes. Everything runs in your browser — the token, secret and key are never sent to any server.

Does decoding a JWT prove it's genuine?

No. Decoding only reads the contents. Only a successful signature verification with the right secret or public key proves the token wasn't forged or modified.

Which algorithms can it verify?

HS256/384/512 with a shared secret, RS256/384/512 and PS256/384/512 with an RSA public key, and ES256/384/512 with an EC public key (PEM “BEGIN PUBLIC KEY” format).

What does “alg: none” mean?

The token has no signature, so anyone could have created or changed it. Servers should always reject unsigned tokens.

Why can't it decode my token (JWE)?

Tokens with five dot-separated parts are encrypted JWEs, not signed JWTs. Their contents can only be read with the decryption key.