Tools/JWT
JWT decoder
jwt.io is the reference debugger; this one keeps the same split (header / payload / signature) and adds claim explainers, an expiry timeline, alg none warnings, JWKS paste, and HS256 re-sign — all in the browser. Verification uses Web Crypto. We never see your token.
Encoded JWT
Tokens never leave this tab. Do not paste production secrets into any website you do not control — including this one if you do not trust the machine.
Header
alg HS256
{
"alg": "HS256",
"typ": "JWT"
}Payload
3 claims
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}Signature
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5ciat / nbf / exp timeline
- iat
- 2018-01-18T01:30:22.000Z
- nbf
- —
- exp
- —
Claims
| Claim | Value | Meaning |
|---|---|---|
| sub | 1234567890 | Stable identifier for the principal (user, service, device) the token is about. |
| name | John Doe | Custom claim. Meaning is defined by the issuer, not RFC 7519. |
| iat | 1516239022 | 2018-01-18T01:30:22.000Z. Unix seconds when the token was created. Used for age, revocation windows, and debugging. |
Verify signature
HMAC: paste the shared secret. RSA/ECDSA: PEM public key or JWK JSON. Browser Web Crypto only — HS256.
Edit payload and re-sign (HS256)
Uses the secret box on the left. Demo secret is your-256-bit-secret.
Verify in code
Decode only. Verification belongs on the server (or Web Crypto with a public key).
const [h, p] = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c".split(".");
const json = (part) => JSON.parse(atob(part.replace(/-/g, "+").replace(/_/g, "/")));
console.log(json(h), json(p));Algorithms: HS256 · HS384 · HS512 · RS256 · RS384 · RS512 · ES256 · ES384 · ES512 · PS256 · none