TidyFigure

JWT Decoder

  • 100% free
  • No sign-up
  • Runs in your browser

A JWT (JSON Web Token) is three Base64URL-encoded parts separated by dots: header.payload.signature. Paste one below to read its header and claims as JSON, see whether it has expired, and (for HS256/384/512 tokens) verify the signature with your secret. Decoding happens entirely in your browser.

The token is decoded in your browser and never sent anywhere. Still, avoid pasting live production tokens into any website you don’t control.

Everything runs in your browser. Nothing you type is sent anywhere.

The three parts of a JWT

eyJhbGciOiJIUzI1NiJ9 . eyJzdWIiOiIxMjMifQ . SflKxwRJSMeKKF2QT4fw… header payload signature Header: {"alg":"HS256","typ":"JWT"} which algorithm signed it Payload: {"sub":"123","exp":1761139600} the claims (data) Signature: HMAC-SHA256(header + "." + payload, secret)

The header and payload are only encoded, not encrypted. Anyone who has the token can read them, which is exactly what this tool does. The signature is what stops people changing them: without the secret or private key, any change makes the signature invalid.

Standard claims

ClaimMeaning
issIssuer: who created the token
subSubject: usually the user ID
audAudience: which service the token is for
expExpiry time, as seconds since 1 January 1970 (Unix time)
nbfNot valid before this time
iatIssued at
jtiUnique token ID, used to block reuse

The decoder converts exp, iat and nbf into readable dates in your time zone and tells you how long ago or how soon they are.

Signing algorithms

  • HS256, HS384, HS512: HMAC with a shared secret. The same secret signs and verifies, so every service that checks tokens must keep it private. Paste the secret above to verify.
  • RS256, PS256: RSA. The issuer signs with a private key; anyone can verify with the public key, often published at a JWKS URL.
  • ES256: elliptic-curve signatures: like RSA but with shorter keys and signatures.
  • none: no signature at all. Servers must never accept these.

Security checklist

  • Never put secrets in the payload. Passwords, card numbers and private data are readable by anyone with the token.
  • Always verify the signature on the server and fix the expected algorithm, rather than trusting the token's own alg header.
  • Keep expiry short (minutes to an hour for access tokens) and use refresh tokens for longer sessions.
  • Use a long random secret for HS256: at least 32 random bytes. The password generator can make one.
  • Be careful where you paste tokens. A valid token works like a password until it expires. This page decodes locally, but you should still avoid pasting live production tokens into any third-party site.

The sample token above is generated in your browser and signed with the secret my-secret-key, so you can try verification.

Frequently asked questions

How do I decode a JWT?

Paste it in the box. The header and payload are Base64URL-decoded and shown as formatted JSON, with dates converted to readable times.

Is a JWT encrypted?

No. A standard JWT is only signed. Anyone can read its contents, so never store secrets in it. Encrypted tokens (JWE) have five parts instead of three.

How do I check if a JWT has expired?

Look at the exp claim. The decoder converts it to a date and shows whether the token has expired.

Can this verify the signature?

Yes, for HS256, HS384 and HS512 tokens: enter the shared secret. RSA and ECDSA tokens need the issuer’s public key.

Is my token sent to a server?

No. Decoding and verification happen in your browser with the Web Crypto API.

Last updated October 2026 · More developer tools