JWT decoder.
Decode a JSON Web Token and read its header, claims and expiry. Everything happens locally. The signature is shown but not verified; you would need the key for that.
Header
Payload
Timing
Signature
About this tool
A JWT is three Base64url segments separated by dots: a header describing the algorithm, a payload of claims, and a signature. This page decodes the first two and lays out the time-based claims (iat, nbf, exp) as readable timestamps with how long ago or how far away they are, so an expired or not-yet-valid token is obvious at a glance. A leading Bearer prefix is stripped automatically. Nothing you paste here leaves your browser.
Reading the header
| Field | Meaning |
|---|---|
| alg | The signing algorithm. HS256 is HMAC with a shared secret; RS256 and ES256 are RSA and ECDSA with a public key you can fetch. none should be rejected by every server. |
| typ | Usually JWT. at+jwt marks an OAuth access token. |
| kid | Key ID: which key in the issuer's JWKS signed this token. Wrong or unknown kid is a common cause of "invalid signature" after a key rotation. |
Standard claims in the payload
| Claim | Meaning |
|---|---|
| iss | Issuer: who created the token. Verifiers should check it matches the expected identity provider. |
| sub | Subject: the user or client the token is about. |
| aud | Audience: which service the token is for. A token for one API should be rejected by another. |
| exp | Expiry, as Unix seconds. After this the token must be rejected. See how JWT expiry works. |
| nbf | Not before: the token is not valid until this time. |
| iat | Issued at. Useful for working out the token's lifetime (exp - iat). |
| jti | A unique ID, so a token can be revoked or replay detected. |
| scope, roles, email | Application-specific claims. Their names and shapes vary by provider. |
Common JWT problems
- "Token expired" but it was just issued: the client and server clocks disagree. Compare
iatto the current time shown in the Unix timestamp converter. - Invalid signature after decoding fine: the wrong secret or key, a
kidthat has rotated, or the token was altered. Decoding never proves authenticity. - Not enough segments: the token was truncated when copied, or a cookie value was URL-encoded and the dots turned into
%2E. - Five segments: that is a JWE, an encrypted token, which cannot be read without the key. The tool says so.
- Base64 decode failure: JWTs use Base64url, not standard Base64. See Base64 vs Base64url.
- exp in milliseconds: some libraries write 13-digit values. Verifiers expect seconds and will treat the token as valid for centuries or reject it.
Decoding is not verification
Anyone can read a JWT; the payload is only Base64url-encoded, not encrypted. Never put secrets in one, and never trust the claims until the signature has been verified against the issuer's key on the server. This tool is for reading tokens while debugging, not for deciding whether to accept them.