Skip to content
HNarzędzia
en
Categories

JWT decoder online - read a token and verify its signature

Paste a JWT to see its header and claims in a readable form, check whether it has expired, and verify the signature with a secret or public key. Everything runs locally.

  • Free
  • No sign-up
  • Private
  • Runs locally
Never paste production tokens into unknown websites. This decoder works entirely locally in your browser - the token and key are never sent anywhere. Still, treat production tokens like passwords: if you pasted one anywhere online, consider revoking it.

How to decode a JWT

  1. 1.

    Paste the token

    Paste the whole token (a “Bearer ” prefix is fine). Header and payload are decoded instantly.

  2. 2.

    Check validity

    See exp, iat and nbf as readable dates with relative time and whether the token has expired.

  3. 3.

    Verify the signature

    Enter the secret (HS256/384/512) or a PEM/JWK public key (RS, PS, ES) to confirm the token was not tampered with.

JWT structure

A JWT (RFC 7519) has three base64url-encoded parts separated by dots: header.payload.signature. The header holds the signing algorithm, the payload holds claims such as sub, iss, exp and iat, and the signature protects against modification. Header and payload are only encoded, not encrypted - never put secrets in them.

Never paste production tokens into unknown websites. This tool works locally and sends nothing anywhere, but treat tokens like passwords.

Standard claims: exp, iat, nbf, iss, sub, aud

ClaimMeaningExample
expexpiry time1767225600 = 1 Jan 2026, 00:00 UTC
iatissued atUnix seconds
nbfnot valid beforeUnix seconds
ississuerhttps://auth.example.com
subsubject (usually user ID)user_123
audintended audienceapi.example.com
jtiunique token IDa UUID

Timestamps are seconds since 1 January 1970 UTC, not milliseconds. A token issued at 1767225600 with a 15-minute lifetime has exp = 1767225600 + 900 = 1767226500. The decoder converts them to local and UTC dates and shows the remaining time.

Verifying the signature: HS256 vs RS256 vs ES256

  • HS256/384/512 - HMAC with one shared secret. Anyone who can verify the token can also create one, so the secret must stay on the server.
  • RS256/384/512 and PS256/384/512 - RSA key pair. The issuer signs with the private key; anyone can verify with the public key, often published as a JWKS.
  • ES256/384/512 - elliptic-curve keys; much shorter signatures than RSA with comparable security.

Paste the public key as PEM (-----BEGIN PUBLIC KEY-----) or as a JWK object. X.509 certificates and PKCS#1 keys (RSA PUBLIC KEY) are not accepted - extract or convert the key first, e.g. openssl x509 -pubkey -noout. If the secret is base64url-encoded, tick the matching option.

Common reasons a signature fails

  • Wrong secret or key, or one with a stray space or newline.
  • A base64-encoded secret entered as plain text (or the other way round).
  • The token was copied incompletely - all three parts are required.
  • The token header says alg: none - it has no signature and must never be trusted.

Decoding alone proves nothing: always verify the signature on the server before trusting any claim.

Frequently asked questions

Is it safe to paste a JWT here?

+
The decoder runs entirely in your browser and sends nothing. As a general rule, do not paste production tokens or secrets into sites you do not control.

Is a JWT encrypted?

+
No. A standard signed JWT (JWS) is only base64url-encoded and can be read by anyone. Encrypted tokens use the JWE format.

Which algorithms can be verified?

+
HS256/384/512, RS256/384/512, PS256/384/512 and ES256/384/512, using a secret, PEM (SPKI) public key or JWK.

How do I check if a JWT has expired?

+
Look at the exp claim - the expiry time in seconds since 1970. The decoder shows it as a date, displays the time left and marks the token as expired, valid or not yet valid (nbf).

What is the difference between HS256 and RS256?

+
HS256 uses one shared secret for signing and verifying (HMAC-SHA256). RS256 uses a key pair: a private key signs and a public key verifies, so verifiers cannot forge tokens.

Why does verification say the signature is invalid?

+
Usually the secret or key is wrong, contains extra whitespace, or is base64-encoded but entered as text. It can also mean the token was modified.

Updated: