JWT Decoder: Decode JSON Web Tokens
Decode compact JWS JWTs in this browser. Split header, payload, and signature; inspect alg, typ, and kid; read exp, nbf, and iat against the clock in UTC and your local timezone. Optional HMAC verify covers HS256, HS384, and HS512 only. Tokens are not sent anywhere.
Accepts a compact JWS (three base64url parts). JWE five-part tokens are detected and not decrypted. Nothing leaves this page.
Token summary
header payload signature
Time claims vs now
NumericDate values are UTC seconds since 1970-01-01T00:00:00Z (RFC 7519). Values at or above 1e11 are treated as milliseconds and flagged. exp is expired at or after that instant. nbf is not yet valid before that instant.
| Claim | Unix | UTC | Local | Vs now | Reading |
|---|
Registered claims
Names follow RFC 7519 §4.1 and the IANA JWT Claims registry. Other payload keys are listed as additional claims.
| Claim | Meaning | Value |
|---|
Header JSON
JOSE header (RFC 7515). alg is required for JWS. kid names a key; it is not a key.
Payload JSON
JWT claims set (RFC 7519). Signed tokens are readable by anyone; do not put secrets in the payload.
Signature
HMAC is computed over the ASCII signing input base64url(header) + "." + base64url(payload), using the original compact segments (RFC 7515). Re-encoding JSON would break the MAC.
How to read the result
- Decoding shows claims. It does not prove the token is authentic. HMAC verify is optional and uses Web Crypto in this page only.
- alg none is an unsecured JWT (RFC 7519 §6): the signature must be empty, and claims have no integrity protection.
- RS256, ES256, PS256, EdDSA, and similar algorithms need the matching public key. This decoder never reports those as verified.
- Do not verify an HMAC using an RSA public key. That algorithm-confusion bug is called out in RFC 8725.
- The sample token is HS256 with UTF-8 secret solodiff-sample-hs256-secret. It is a documented demo secret, not a credential.