Tools100% Local
← All tools

JWT Decoder & Verifier

RFC 7519 / 7518 · runs entirely in your browser

Paste a JWT to inspect its header, payload, and the standard time claims (iat, nbf, exp). Then paste a secret or a PEM-encoded public key to actually verify the signature — HMAC-SHA, RSA PKCS#1-v1.5, RSA-PSS or ECDSA, in 256 / 384 / 512 variants. Tokens, secrets and keys are processed by the browser's native Web Crypto API and never sent anywhere.
Header
Paste a token above
Payload
SignatureNot verified

What gets verified

A JWT is three Base64URL segments joined by dots: header.payload.signature. Verification recomputes the signature over header + "." + payload using the algorithm declared in the header (alg) and the key you provide, then compares it against the supplied signature segment. A match means the token has not been tampered with and was issued by someone holding the corresponding key.

This page handles every standard JWT signing family:

Time claims

The standard registered claims for time are surfaced separately so you can scan them at a glance:

Common use cases

Privacy

JWTs frequently contain personally identifiable information — user IDs, email addresses, organisation IDs — and the secrets you'd use to verify them are even more sensitive. This page does the entire round-trip locally: tokens go into a <textarea>, signatures are computed by crypto.subtle.verify() in your browser, results render to the DOM, and that is the entire data flow. There is no telemetry, no error reporting, no fetch() calls back to a server. The page itself is plain HTML and JavaScript — view source if you want to audit it.