Skip to content

JWT decoder and verifier

Decode a JSON Web Token’s header and claims, see when it expires, and verify its signature, all in your browser. Tokens never leave your device.

Decoding shows what a token says; only verifying the signature shows that it’s genuine.

Token

Paste a JWT. “Bearer ” and line breaks are removed.

Decoded

Nothing to show yet

Paste a JWT. Its header, payload and claims appear here.

Verify the signature here once a token is decoded.

How to decode and verify a JWT

  1. Paste the token. A leading Bearer and line breaks are removed for you.
  2. Read the header, the payload and the claims. Time claims (exp, iat, nbf) are shown as dates in your time zone, and the badge says whether the token is valid, expired, not yet valid or has no expiry.
  3. To check that it’s genuine, enter the secret or the public key under Verify signature and select Verify.

What’s inside a JWT

A JSON Web Token has three parts separated by dots: a header (the algorithm, e.g. HS256), a payload of claims about the user or session, and a signature. The first two are only base64url-encoded, so anyone can read them; the signature lets the receiver check that the issuer created the token and nobody changed it.

Verification uses the browser’s Web Crypto API through the open-source jose library, which loads only when you select Verify. It checks the signature only; expiry is shown separately by the status badge.

Supported algorithms and keys

HS256, HS384, HS512
Shared secret, entered as text.
RS, PS, ES (256/384/512), EdDSA
Public key as PEM (-----BEGIN PUBLIC KEY-----), an X.509 certificate, a JWK, or a JWKS (the key is chosen by kid). EdDSA means Ed25519 and needs a browser with Ed25519 support in Web Crypto.
Not supported
PKCS#1 keys (-----BEGIN RSA PUBLIC KEY-----): convert them to a “BEGIN PUBLIC KEY” key or a JWK. Private keys are refused, because verification needs only the public key.
Encrypted tokens (JWE)
Tokens with five parts are encrypted; reading them needs the decryption key and isn’t supported.

Troubleshooting

  • “This has 2 parts separated by dots.” The token was cut off when copied, or it isn’t a JWT. A JWT always has three parts.
  • “Invalid signature.” The secret or key doesn’t match, or the token was changed. For HS tokens, check whether your secret is stored Base64-encoded: this tool uses the secret as plain text.
  • “Key type doesn’t match algorithm RS256, or the key is malformed.” For example an EC key for an RS256 token, or a key that was cut off when copied. Use the key the issuer publishes for this algorithm.

How your data stays private

Everything happens in your browser, on your device. Your files and text are never uploaded, never stored, and never put in the address bar.

  • The site’s security policy (connect-src 'self') tells your browser to block any attempt by the page to send data to another server.
  • Only your preferences, such as the theme and a tool’s last-used options, are saved in your browser’s local storage. Never your content.
  • To check it yourself, open your browser’s developer tools, select the Network tab, and use the tool: no request carries your data.

There is no account, no sign-up and no watermark. After your first visit, pages open without a connection; a tool’s larger parts, such as the PDF and image engines, are saved the first time you use it, so it works offline from then on.

Frequently asked questions

Is it safe to paste a JWT here?

Yes. The token is decoded in your browser, on your device. It isn’t uploaded, stored, logged or put in the URL, and the site’s security policy blocks the page from sending data to other servers. Still, treat tokens like passwords: a valid token gives access to whatever it was issued for, so don’t paste production tokens into tools you can’t check.

Can a JWT be decoded without the secret?

Yes. The header and payload are only base64url-encoded, not encrypted, so anyone holding the token can read them. The secret or key is needed only to verify the signature, which proves who issued the token and that it wasn’t changed. Never put confidential data in a JWT payload.

How do I verify the signature?

Paste the token, then enter the secret (for HS256, HS384, HS512) or the issuer’s public key (for RS, PS, ES and EdDSA algorithms) under Verify signature. Keys can be PEM, a certificate, a JWK or a JWKS, for example from the issuer’s /.well-known/jwks.json. You then see “Signature verified” or “Invalid signature”.

How do I check if a token is expired?

The status badge shows Valid, Expired, Not yet valid or No expiry, based on the exp and nbf claims and your device’s clock. Each time claim is shown as a date in your time zone with a relative time such as “expired 3 hours ago”. This is a time check only; it doesn’t say the token is genuine.

What is the difference between decoding and verifying?

Decoding reads what the token says. Verifying checks the signature with the key, proving the token was issued by the key’s owner and not altered. A decoded token can be forged by anyone; only a verified one can be trusted. Tokens with alg: none have no signature at all and should always be rejected.