JWT Decoder: Read a JSON Web Token Online

Decode a JSON Web Token in your browser: see the header, payload and exp/iat as readable dates. Decoding only, nothing is uploaded.

Runs in your browser. Nothing is uploaded.

Decoding only: the signature is not verified. Do not paste production secrets or live tokens. Nothing leaves your browser.

Example

Input:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjMiLCJyb2xlIjoiYWRtaW4iLCJpYXQiOjE3MDAwMDAwMDB9.signature

Result:

header: { "alg": "HS256", "typ": "JWT" }   payload: { "sub": "123", "role": "admin", "iat": 1700000000 }

What is inside a JWT

A JSON Web Token is three base64url-encoded parts joined by dots: header.payload.signature. The header names the signing algorithm (for example HS256 or RS256) and the token type. The payload carries the claims, such as sub (subject), iat (issued at), exp (expiry) and any custom fields like a role. The signature lets the server check that the first two parts were not changed.

Base64url is an encoding, not encryption. Anyone holding the token can read the header and payload, which is exactly what this tool does. Never put passwords or other secrets in a JWT payload.

Decoding is not verifying

This page decodes the token so you can debug it. It does not check the signature, because that needs the secret or public key, and you should never paste a production secret into any website. A decoded token that looks fine may still be forged or expired. Your API must verify the signature, the algorithm, exp, and the issuer and audience on every request.

Do not paste live production tokens into online tools, including this one. The decoding happens in your browser and nothing is sent, but a token is a bearer credential, so use short-lived test tokens when you can.

Common claims to check when debugging

When a request fails with 401, look at exp first: it is a Unix time in seconds, and this tool shows it as a date and tells you whether it has passed. Then check iat and nbf for clock skew between servers, aud and iss for the wrong environment, and the alg header for a mismatch with what your server accepts. Short access tokens paired with a refresh token, plus role checks on the server, are the usual pattern in Express and Angular apps.

In Express, verify with jsonwebtoken and pin the algorithm: jwt.verify(token, secret, { algorithms: ["HS256"] }). Leaving the algorithm open has caused real vulnerabilities, such as tokens signed with "none" being accepted.

Frequently asked questions

Does this tool verify the JWT signature?

No. It only decodes the header and payload. Verifying needs the secret or public key, and that must happen on your server.

Is it safe to paste my token here?

The decoding runs in your browser and nothing is uploaded. Still, a token is a credential, so prefer test or expired tokens and never paste production secrets.

What do exp, iat and nbf mean?

exp is when the token expires, iat when it was issued and nbf the earliest time it is valid. All are Unix timestamps in seconds.

Is a JWT payload encrypted?

No. It is base64url-encoded, so anyone with the token can read it. Use JWE if you need encryption.

Related tools