JWT Decoder
Paste a JSON Web Token to inspect its header, payload, and claims. Decoding runs entirely in your browser.
—
—
How JWTs are structured
A JSON Web Token is three Base64URL-encoded segments separated by dots: header.payload.signature. The header and payload are JSON objects. The signature is a cryptographic signature over the first two segments using the algorithm specified in the header.
Common standard claims
| Claim | Meaning |
|---|---|
iss | Issuer — who issued the token |
sub | Subject — who the token is about (often user ID) |
aud | Audience — who the token is intended for |
exp | Expiration time (Unix timestamp). Tokens past this are invalid. |
nbf | Not before — token is invalid before this time |
iat | Issued at — when the token was created |
jti | JWT ID — unique identifier, useful for revocation |
Security tips
- Never accept
alg: noneon the server — it disables signature verification entirely. Many libraries used to allow this by default; modern versions reject it. - Don't put secrets in the payload. JWTs are not encrypted — anyone holding the token can read it.
- Set a short expiration and use refresh tokens for long-lived sessions. A leaked JWT is unusable after it expires.
- Verify on every request. Don't cache "this JWT was valid earlier" — check signature, expiration, and audience each time.
Frequently asked questions
What's the difference between JWT, JWS, and JWE?
JWT is the umbrella term for the token format. JWS (JSON Web Signature) is a JWT that is signed but not encrypted — the most common form, what this tool decodes. JWE (JSON Web Encryption) is a JWT that is encrypted, so the payload is opaque without the decryption key.
What does the signature actually verify?
The signature is computed over base64url(header) + "." + base64url(payload). It proves both that the header and payload haven't been changed and that whoever signed the token had the correct key.