Paste a token and watch it decode live — header, payload and signature color-matched between the raw text and their decoded form. Then verify an ES256/ES384/ES512 signature against the issuer's public key, with clear explanations when something is off.
100% local — everything runs in your browser, nothing is sent to any server
The first segment — everything before the first dot — decodes to the JOSE header: algorithm, token type, key id.
The second segment decodes to the claims: who issued the token, for whom, and for how long.
The third segment — everything after the second dot — is the raw signature over header.payload. Verify it below.
Signature not verified
Decoding needs no key — it happens as you type. Once a token is decoded above, paste the issuer’s public key here to check its signature.
Everything on this page runs locally in your browser — the token and key are never sent anywhere. The token is split on dots, and the header and payload are base64url-decoded and parsed as JSON as you type; the colors in the editor are purely presentational and mirror the decoded blocks on the right. For ES256/ES384/ES512 the tool rebuilds the exact signing input — the ASCII string header.payload — hashes it with SHA-256/SHA-384/SHA-512, and checks the raw r‖s signature against your public key on P-256/P-384/P-521 using the audited @noble/curves library. Time claims are compared against your machine's clock, so a token that looks expired here may still be accepted by a server with clock skew tolerance. Remember that a valid signature only authenticates the issuer — checking exp, iss and aud is still your job.