JWT Decoder & Verifier

Paste a JWT to read its header and payload and check whether it is still valid. Everything runs in your browser — the token is never sent anywhere.

Verify signature

Enter a secret or key to verify.

How a JSON Web Token is put together

A JWT is three base64url strings joined by dots:header.payload.signature. The header is a tiny JSON object naming the signing algorithm (alg) and type (typ). The payload is another JSON object ofclaimssub (subject), iss (issuer),aud (audience), plus the three time claims below. Thesignature is a MAC or digital signature computed overheader.payload using a key only the issuer holds.

Decoding is trivial and unauthenticated: this tool splits on the dots, base64url-decodes the first two parts and runs JSON.parse. That is why a JWT is not a secret container — never put anything in the payload you would not put on a postcard. If you need to move data secretly, encrypt it (see theBase64 tool for the encoding step, and note Base64 is not encryption).

The three time claims

  • iatissued at. When the token was minted.
  • nbfnot before. The token is invalid until this moment; useful for tokens scheduled to activate later.
  • expexpiry. After this moment the token must be rejected. All three are Unix timestamps in seconds, not milliseconds — a common off-by-1000 bug.

The validity badge compares exp and nbf against your computer's clock. If your machine's time is wrong, the badge will be wrong too — the server that issued the token is the real authority.

Verifying the signature

HS256/384/512 use HMAC with a shared secret: the same string signs and verifies. Paste that secret and the tool recomputes the MAC with crypto.subtle.verify.RS/PS/ES use public-key signatures: the issuer signs with a private key, and you verify with the matching public key as PEM (SPKI, the BEGIN PUBLIC KEY form) or JWK. A green check means the bytes are authentic and unmodified; a red cross means the key is wrong or the token was altered. alg: none andEdDSA cannot be verified here.

Common pitfalls

  • Copying Bearer  along with the token — trim it.
  • A trailing newline on the HMAC secret — it changes the MAC.
  • Treating exp as milliseconds — it is seconds.
  • Assuming a decoded token is a verified token — it is not.

Working with tokens often means working withJSON andURL-encoded values too; those tools are equally client-side.

Related tools

Frequently asked questions

Is my token sent to a server?
No. Decoding is a base64url split and a JSON.parse; verification uses the browser's Web Crypto API. The token, secret and key stay on your device — you can open the page offline and it still works.
What are the three parts of a JWT?
Header, payload and signature, separated by dots and each base64url-encoded. The header names the signing algorithm, the payload holds the claims, and the signature is computed over 'header.payload' with a key.
Does decoding verify the token?
No. Anyone can decode a JWT — it is not encrypted. Only signature verification, with the matching secret or public key, tells you the token is genuine and untampered.
Which algorithms can this verify?
HS256/384/512 with a shared secret, and RS256/384/512, PS256/384/512 and ES256/384/512 with a PEM (SPKI) or JWK public key. 'none' and EdDSA are not verifiable here — EdDSA support in the browser's crypto is not universal.
What does the Expired / Not yet valid badge mean?
It compares the exp claim (expiry) and nbf claim (not-before) against your computer's current time. Expired means now is past exp; Not yet valid means now is before nbf; otherwise the token is inside its valid window.
Why is exp shown as both a date and 'in 3 days'?
exp, iat and nbf are Unix timestamps in seconds. The absolute time tells you exactly when; the relative phrase tells you at a glance whether it is soon, long past, or far off.
My HS256 token won't verify — why?
The secret must match byte-for-byte, including any trailing newline. If the secret was base64-encoded when the token was signed, decode it first — this tool treats the secret as a literal UTF-8 string.
Can I paste a token with 'Bearer ' in front?
Trim it to just the token. The decoder expects exactly three dot-separated base64url segments and will report the wrong count otherwise.

Last reviewed: September 2026. Figures and formulas are checked against their published sources; see the site's data notes.