How to use the JWT Decoder
- Paste the token into the box. You can include the Bearer prefix from an Authorization header; it is ignored.
- Read the decoded header and payload, and check the status bar to see whether the token has expired.
- Use the claims table to see what each claim means, with timestamps such as
expandiatshown as real dates. - For HS256, HS384 or HS512 tokens, type the shared secret to verify that the signature is genuine.
Features
- Decodes header and payload with pretty-printed JSON
- Claims table that explains standard and OpenID Connect claims
- Readable local dates and relative times for exp, iat and nbf
- Instant expired, not-yet-valid or valid status
- HMAC signature verification with the Web Crypto API
- Detects encrypted JWE tokens, unsigned tokens and truncated input
How a JWT is built
A JSON Web Token (JWT, defined in RFC 7519) is a compact way to pass a set of facts, called claims, between two systems. It is the string you see in Authorization: Bearer headers, OAuth access tokens and OpenID Connect ID tokens. A signed JWT has three parts joined by dots:
- Header: a small JSON object naming the signing algorithm (
alg) and usually the type (typ: "JWT") and a key ID (kid). - Payload: a JSON object holding the claims, for example who the user is and when the token expires.
- Signature: a cryptographic signature over the first two parts, created with a secret or private key.
The header and payload are only base64url-encoded, not encrypted. That is why this tool, or anyone else holding the token, can read them without a key. The signature does not hide anything; it lets the receiver prove that the token came from the issuer and was not modified.
Registered claims
| Claim | Name | Meaning |
|---|---|---|
iss | Issuer | The service that created the token |
sub | Subject | The user or client the token describes |
aud | Audience | The API or app that should accept it |
exp | Expiration | Unix time after which it must be rejected |
nbf | Not before | Unix time before which it must be rejected |
iat | Issued at | Unix time when it was created |
jti | JWT ID | Unique ID, useful for blocking replays |
Time claims are in seconds since 1 January 1970 UTC, not milliseconds. A value such as 1767225600 is midnight UTC on 1 January 2026. The Unix Timestamp Converter converts them in either direction.
HS256 versus RS256
HS256, HS384 and HS512 use HMAC with a single shared secret. The same secret signs and verifies, so every service that checks the token could also create one. RS256, ES256 and their relatives use a private key to sign and a public key to verify, which suits systems where many APIs trust one identity provider. This tool verifies HMAC signatures locally with your browser’s Web Crypto API. Asymmetric tokens are decoded but need the issuer’s public key, usually published as a JWKS document, to verify.
Be careful where you paste tokens
A valid access token is a password with an expiry date: anyone who holds it can call the API as that user until it expires. Pasting a production token into a website that sends it to a server can leak it into logs you do not control. This decoder runs entirely in your browser; the page makes no network request with your token, and it keeps working if you disconnect from the internet. Even so, prefer test tokens, and revoke any real token you suspect has been exposed.
Common mistakes
- Putting secrets in the payload. Anyone can read it. Store only identifiers and permissions.
- Trusting a decoded token without verifying it. Decoding shows what a token says, not whether it is genuine. Servers must check the signature, the algorithm,
exp,audandiss. - Accepting
alg: none. Unsigned tokens can be forged by anyone. Always pin the algorithms you expect. - Weak HMAC secrets. Short or guessable secrets can be brute-forced offline. Use at least 32 random bytes for HS256.
- Ignoring clock skew. Allow a minute or two of leeway when comparing
expandnbfacross servers.
Frequently asked questions
Is it safe to paste my JWT here?
This page decodes and verifies tokens entirely in your browser and never sends them anywhere. As a habit, use test tokens where possible and treat any live token as a temporary password.
Can a JWT be decoded without the secret?
Yes. The header and payload are only base64url-encoded, so anyone can read them. The secret or key is needed only to create or verify the signature.
Why does it say my token is expired?
The exp claim is earlier than your device’s current time. If you believe the token is fresh, check that your computer clock is correct and that the issuer set exp in seconds rather than milliseconds.
Can this tool verify RS256 or ES256 tokens?
It decodes them fully, but signature checks are limited to HS256, HS384 and HS512, which use a shared secret. Asymmetric tokens need the issuer’s public key.
What is the difference between a JWT and a JWE?
A JWT as usually seen is a signed JWS with three parts and a readable payload. A JWE has five parts and an encrypted payload that cannot be read without the decryption key.