JWT decoder and verifier

Read a token's header and claims, see when it expires in words rather than epoch seconds, and check the signature against your own secret or public key - all in this tab. A JWT is a bearer credential: anyone who holds it can act as its subject, which is reason enough not to paste one into someone else's server.

  • VerifiesHS256/384/512, RS, PS
  • Your tokenNever leaves the tab
  • KeysNever stored or sent

Your token

Paste it with or without the Bearer prefix.

Algorithm
HS256
JWT
Claims
8
in the payload
Status
Expired
last year
  • Expired - exp is in the past.

Signature

HMAC tokens are checked with the shared secret.

Signature checks out against this secret (HS256).

Verification runs through the browser’s own WebCrypto implementation. Nothing on this page is transmitted: you can watch the network tab, or load the page and pull the cable.

Header

{
  "alg": "HS256",
  "typ": "JWT"
}

Claims

Times are shown as your local clock reads them, not as epoch seconds.

ClaimValue
subSubject - who the token is about4821
nameريم الحلبي
roleeditor
scopeGranted scopesorders:read orders:write
issIssuer - who minted the tokenhttps://api.frugaldomain.site
audAudience - who it is meant forfrugal-dashboard
iatIssued at17500000006/15/2025, 6:06:40 PM · last year
expExpires at17500036006/15/2025, 7:06:40 PM · last year

Decoding is not verifying

Anyone can read a JWT - the payload is base64, not encryption. What proves it came from your server is the signature, and checking that needs the key. A tool that only decodes tells you what the token claims, not whether the claim is true.

Why alg "none" is flagged

A token whose header says alg: none carries no signature at all. Libraries that honour that header accept a token anyone could have written - the oldest JWT attack there is, and still found in the wild. This page marks it as an error rather than decoding it quietly.

Never paste a private key

RSA verification needs only the public half, which is published by design. Nothing legitimate asks you to paste a private key or an HMAC secret into a web page you do not control - including this one, which is why the whole check runs locally and the page says so.

Frequently asked questions

Is it safe to paste a JWT into an online decoder?
Usually not. A JWT is a bearer credential: whoever holds it can act as its subject until it expires, so pasting a live token into a server you do not control hands over an account. This page decodes and verifies entirely in your browser - you can open it, disconnect from the network, and it still works.
How do I verify a JWT signature without a server?
The browser's own WebCrypto implementation does it. Paste the shared secret for an HS256 token, or the public key in PEM form for RS256, and the check runs locally. Never paste a private key or a production HMAC secret into a page you do not control.
What does alg: none mean in a JWT?
It means the token carries no signature at all. Libraries that honour that header accept a token anyone could have written - the oldest JWT attack there is. Reject them at the library level and pin the algorithms you accept.
Why can it not verify ES256 tokens?
Elliptic-curve tokens need the raw r||s signature pair and a different key import path, and a half-right implementation would be worse than none. The page says so rather than pretending; use your provider's library for ES256.