About JWT Decoder
Decode any JSON Web Token (JWT) instantly to inspect its header, payload, and signature. Hover any claim for the RFC 7519 explanation, watch a live countdown to <code>exp</code>, and optionally verify HS256/HS384/HS512 signatures by pasting the secret. Everything runs in your browser — your token is never transmitted.
What is a JWT?
A JSON Web Token is three base64url-encoded segments separated by dots: header.payload.signature. The header declares the signing algorithm (alg) and key id (kid). The payload holds claims about the subject — who they are, when the token was issued, when it expires. The signature lets a server verify the token has not been tampered with, without storing session state.
A typical token looks like:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.eyJzdWIiOiIxMjM0NSIsImV4cCI6MTcwOTM4MDgwMH0
.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Decode each segment, you get JSON — except the signature, which stays as raw bytes.
How to use this decoder
Paste any JWT into the input. The decoder splits and base64url-decodes each segment instantly. You get:
- Header — pretty-printed JSON with
alghighlighted - Payload — every claim named, with hover tooltips citing the RFC section that defines it
- Signature — raw byte length, plus a live countdown to
expif present - Verify — paste the shared secret to run HS256/384/512 verification, or paste a JWK for RS/ES variants
If the token is malformed (wrong segment count, base64 errors, non-JSON header), you get a precise error pointing at which segment failed.
Common workflows
Debug an auth bug in production. Copy the bearer token from a failing request, paste here, check exp and aud. Most “401 Unauthorized” bugs are clock skew or audience mismatch.
Audit a third-party SSO integration. Paste the ID token, verify the issuer (iss) matches what your code expects, confirm the audience (aud) is your client_id. Drift here is the classic cause of silent auth bypass.
Verify a token without your library. Strip dependencies for a quick check — paste the token, paste the secret, see if the signature holds. We compute the HMAC locally using SubtleCrypto.
Why a local decoder matters
A JWT often contains the user’s email, ID, role, and sometimes session-bound data. Pasting it into a remote decoder means handing that information to whoever runs the site. The original jwt.io decoder runs client-side, but mirrors and clones often do not. TypeParser’s decoder is fully local — open the network tab while you decode and confirm: zero requests.
Frequently asked questions
Is my JWT sent to a server?
Can I verify RS256 / ES256 signatures?
My JWT shows as expired but it should be valid — why?
exp claim is in seconds since the Unix epoch in UTC. Compare against the live countdown shown in the header — if your system clock drifts, the calculation can disagree with your server. Many JWT bugs are clock skew bugs.What is the difference between JWT and JWS?
iss, sub, aud, exp, iat, nbf, jti) carried inside a JWS. Almost every "JWT" you see is a signed JWS-JWT.Why does base64 decode show garbled bytes?
+ becomes -, / becomes _, and padding is stripped. Standard base64 decoders trip on this. Our decoder handles base64url automatically.Can I generate a JWT here?
header.payload string, or a server-side library like jose.Related tools
Last updated: 2025-01-15