JWT Decoder
Inspect a token's header, claims and expiry without handing it to anyone.
The tool you should least want to paste into a website
A JSON Web Token is a bearer credential. Whoever holds it is the user it describes, until it expires. Debugging one means pasting it somewhere — and the usual somewhere is a web page that sends it to a server.
Decoding a JWT requires no server. It is a dot-separated string of three Base64URL segments; the first two are JSON. Splitting and decoding that is a few lines of JavaScript, which is exactly what this page does. No request is made, and you can confirm it by decoding with your network disconnected.
One honest caveat: a token pasted into any browser tab is readable by extensions with access to the page. If the token is a live production credential, revoke or rotate it once you have finished debugging, regardless of which tool you used.
Decoding is not verifying
This is the single most important thing to understand about JWTs, and it causes real vulnerabilities. Anyone can read a token's claims — they are only encoded, not encrypted. The signature is what makes the claims trustworthy, and checking it requires the key.
So never make an authorisation decision from a decoded payload without
verifying the signature server-side. Related: reject the
none algorithm outright, and never let the token's own
alg header choose your verification method — that is the
classic algorithm-confusion attack, where an attacker re-signs an
RS256 token as HS256 using your public key as the HMAC secret.
Reading the standard claims
exp— expiry. Shown here as an absolute time and a countdown.iat— issued at. A far-futureiatusually means milliseconds were written where seconds were expected.nbf— not before. A token can be structurally valid and not yet usable.iss/aud— issuer and audience. Both must be checked; a valid token from the wrong issuer is still the wrong token.sub— the subject, usually a user id.jti— a unique id, used for replay protection and revocation lists.
A JWT in a URL is a credential in a browser history, a proxy log and a referrer header. Put them in an Authorization header.
Do not put secrets in the payload
Because the payload is readable by anyone holding the token, it is not a place for anything private — no internal identifiers you would not publish, no personal data beyond what the client already knows, and certainly no other credentials. If you need confidentiality rather than integrity, you want JWE, not JWS.