Debugging an expired session
Inspect exp, nbf, issuer, subject, and audience without sending the token to a decoder service.
An unexpired time claim does not prove the signature, issuer, audience, or server-side session is valid.
Decode JWT header, payload, signature, registered claims, and expiry, with optional client-side HMAC verification for HS256, HS384, and HS512.
Content last reviewed
Decoded and verified entirely in your browser — the token and secret never leave this page.
Overview
Split a three-segment JWT, decode its JSON header and payload, explain common claims, and show exp or nbf relative to the browser clock. When the header declares HS256, HS384, or HS512, a supplied secret is checked locally; public-key algorithms and the wider authorization context are not verified here.
Header and payload are decoded as UTF-8 JSON while the signature remains visible as base64url text.
Web Crypto checks HS256, HS384, or HS512 against the exact secret entered in the page.
exp, nbf, and iat display as local dates with relative timing; the clock refreshes every 30 seconds.
Copy an encoded segment, decoded header, decoded payload, or signature independently.
How it works
Three steps, in the order the tool above actually takes them.
Avoid live bearer credentials where possible; the page requires exactly three dot-separated segments.
Check alg, typ, standard claim meanings, and whether exp or nbf is relevant to the current browser clock.
For HS256/384/512 only, enter the expected secret and distinguish a matching signature from a merely decoded token.
Use cases
The jobs this page is usually opened for, and the setting that makes each one quick.
Inspect exp, nbf, issuer, subject, and audience without sending the token to a decoder service.
An unexpired time claim does not prove the signature, issuer, audience, or server-side session is valid.
Confirm that a known test secret reproduces the signature for HS256, HS384, or HS512.
Do not paste a production signing secret into general-purpose tooling, even when processing is local.
Show why signed JWT header and payload segments are readable without a decryption key.
Never place passwords, private keys, or unnecessary personal data in a signed-but-unencrypted payload.
Three separate questions
Decoding establishes structure. Supported HMAC verification establishes a signature match for one secret. The application must still enforce issuer, audience, time, subject, revocation, and authorization policy.
| Check | What it establishes | What remains open |
|---|---|---|
| Decode succeeds | The token is genuine and safe to trust. | Only the two JSON segments were readable and structurally valid. |
| HMAC matches | Every claim is acceptable to every service. | The signature matches that secret; policy validation remains application-specific. |
| exp is in the future | The token is valid now. | It is not expired by this browser clock; nbf, issuer, audience, signature, revocation, and server policy still matter. |
| RSA or ECDSA alg | The absence of a secret field means the signature passed. | This page does not accept public keys or verify those algorithms. |
The token is genuine and safe to trust.
Only the two JSON segments were readable and structurally valid.
Every claim is acceptable to every service.
The signature matches that secret; policy validation remains application-specific.
The token is valid now.
It is not expired by this browser clock; nbf, issuer, audience, signature, revocation, and server policy still matter.
The absence of a secret field means the signature passed.
This page does not accept public keys or verify those algorithms.
Privacy
The token and optional HMAC secret stay in component memory and are never uploaded or autosaved. Use test or expired credentials whenever possible.
Encoding, parsing, formatting, generation, comparison, and cryptographic operations run in browser code. Form values and uploaded text files are not sent to a processing API.
Code, tokens, secrets, URLs, and generated outputs stay in component memory until the page reloads or closes. Split-pane tools remember only the divider percentage for the current tab session.
The page reads the clipboard only after a Paste action and writes it only after Copy. A local download is created only when you choose the tool's download control.
The page shell can send the tool slug, never the editor contents or filename. The endpoint is rate-limited using a transient requesting address and is skipped for Do Not Track or Global Privacy Control.
More detail in how processing works and our privacy policy.
Limits
The values this tool actually enforces, not a rounded-up version.
The page decodes compact three-segment JWTs and can verify HS256, HS384, or HS512 only when you provide the matching shared secret. It does not verify RSA, ECDSA, EdDSA, none, remote JWKS, or encrypted JWE tokens; it cannot sign or construct a token and does not enforce application claim policy.
FAQ
The ones that actually come up.
Guides