Guide
How to use this tool well
JSON Web Tokens carry signed claims between services. Paste a token here to read the header and payload — decoding happens locally; treat production tokens as secrets.
The three Base64URL parts
A JWT looks like header.payload.signature. The header usually states alg (e.g. HS256, RS256) and typ JWT. The payload holds claims such as sub (subject), exp (expiry), and custom roles.
The signature proves integrity: only someone with the secret or private key should create a valid token. This debugger decodes; it does not verify signatures unless you supply keys in your own workflow.
Mistakes we see in real projects
Accepting alg:none or switching asymmetric algorithms because the header said so — always pin allowed algorithms server-side.
Storing sensitive PII in the payload. JWTs are Base64, not encrypted; anyone with the string can read it.
Ignoring exp and nbf. Clock skew between servers can cause “random” logouts; allow a small leeway in validation code.
Common questions
- Is it safe to paste my production JWT here?
- Decoding is local, but anyone shoulder-surfing or with access to your screen can read claims. Use expired test tokens when possible; rotate if a live token was exposed.
- Why does the signature show as invalid?
- This tool focuses on inspection. Validating HS256/RS256 requires the correct secret or public key in your backend — not in a public web form.
Editorial standards: how we write and review guides.