JWT Decoder & Verifier
Read what is inside a JSON Web Token, and check its signature — without pasting a live credential into somebody else's server.
Claims
Signature
Verification runs in this tab using the Web Crypto API. Nothing you paste — token, secret or key — is ever sent anywhere.
Signature not checked — paste a secret or public key above.
🔒 Runs entirely in your browser — nothing you type is uploaded or stored on a server.
Paste a token and you immediately see its three parts decoded: the header (which algorithm signed it), the payload (the claims), and a claim-by-claim table where the timestamp claims are shown as real dates rather than ten-digit numbers. exp, nbf and iat are the ones people squint at, so they are rendered as “14 March 2026 09:31 UTC (in 3 hours)” and the page says plainly whether the token has expired.
Also on Txtset: decode a plain base64 string instead · read a Unix timestamp on its own.
Where this runs matters more than usual. A JWT is frequently a live credential — anyone holding it can act as its subject until it expires. Pasting one into a web service means transmitting a working key to a third party. Every part of this page runs in your browser: the decoding, the claim table, and the signature check. The token, the secret and the public key are all read from the fields in front of you and never sent anywhere.
Signature verification is included, using the Web Crypto API that is already in your browser — HMAC (HS256/384/512) with a shared secret, and RSA, RSA-PSS or ECDSA with a PEM public key. There are exactly three outcomes and the page never blurs them: verified, does not match, or not checked. A decoder that shows you a green tick for merely decoding a token is worse than useless, because decoding proves nothing at all — anyone can read a JWT, that is what base64url means.
Two things this deliberately does not do. It will not fetch a JWKS URL to find a key for you, because that would mean this page making requests on your behalf to a host named inside an untrusted token. And it never reads a token from the address bar — no URL parameter on this site is read into the page, so a token cannot end up in your history, in a bookmark, or in a referrer header.
How to use
- Paste the token. It decodes as you type; a leading
Beareris ignored. - Read the header, the payload and the claims table — timestamps are converted for you.
- To check the signature, paste the shared secret (for HS256 and friends) or a PEM public key (for RS, PS and ES algorithms).
- Press Verify signature. You get verified, not matching, or a plain statement that it was not checked.
Examples
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0In0.… decodes to a header of {"alg": "HS256"} and a payload of {"sub": "1234"}.A payload with
exp in the past is flagged “This token expired 6 days ago” rather than leaving you to convert the number.alg: noneA token claiming no algorithm is flagged as proving nothing — that is the classic JWT vulnerability, and it should never verify.
Frequently asked questions
Is my token sent anywhere?
Does decoding a JWT prove it is genuine?
Which algorithms can it verify?
Can it fetch the key from a JWKS URL?
What does <code>alg: none</code> mean?
alg to none, and a badly configured library accepts it. This page flags it rather than showing anything that looks like a pass.