JVT

JWT Verifier

Check HS256 signatures and inspect claims

JWT & Token
πŸ”’ 100% client-side β€” your data never leaves this page
Maintained by Evanβ€’Updated: September 29, 2026β€’Reviewed: September 29, 2026

HS256 only. The secret is not decoded as Base64 or hexadecimal. alg:none never passes signature verification. RS256, HS384, HS512, and JWKS are not supported.

The token and secret are processed only in this page’s memory. They are not uploaded, saved to browser storage, or sent to analytics. The example secret is public and only for demonstrations.

Verification results

Enter a token and known shared secret, then verify. Editing either input clears the previous result.

Page reading mode

The full guide also includes pitfalls, worked examples, snippets, FAQs, and related tools for checking results or troubleshooting.

About this tool

Check an HS256 JWT signature using a known shared secret entered as literal UTF-8 text. Verification uses the original header.payload segments and browser Web Crypto. The tool rejects alg:none as unauthenticated and does not implement other algorithms, JWKS, or remote key retrieval. Signature matching is reported separately from exp and nbf checks against the device clock; issuer, audience, permissions, and revocation remain application responsibilities. Inputs are processed in page memory and are not stored or sent to analytics.

Failure Input Library

An exact expiration boundary with a matching signature

Bad input: An otherwise correctly signed HS256 token has exp = 1700000000. The verification clock is also 1700000000 Unix seconds.

Failure: The HMAC still matches, but the token has expired: the required condition is current time < exp, not current time <= exp. In contrast, nbf = current time meets the not-before condition.

Fix: Keep the signature result separate from time-policy checks. Request a newly issued token after expiration; editing exp inside the old token invalidates its signature.

Suggested Workflow

Frequently Asked Questions

Which algorithms can this JWT verifier check?

Only HS256. The expected algorithm is fixed; a token cannot switch the verifier to RS256, HS384, or HS512. alg:none never counts as authenticated, even with an empty signature. Critical header extensions and unencoded payloads are unsupported.

How should I enter the shared secret?

Enter the exact UTF-8 text used as the HMAC key, including any significant spaces. The field does not decode Base64url, Base64, hexadecimal, PEM, or JWK keys. If the issuer uses decoded binary key bytes, use a verifier that supports that key encoding.

Does a matching signature mean the JWT is valid for login?

No. It only means that the HS256 MAC matches the supplied secret. The application must also enforce issuer, audience, time, permissions, and revocation policies. A correctly signed token can still be expired or unacceptable.

How are exp, nbf, and iat checked?

exp and nbf must be finite NumericDate numbers in seconds. At the device time captured when verification starts, exp must be strictly greater than the current time; nbf may equal the current time. No clock leeway is applied. iat is displayed only, and missing claims are labeled rather than treated as proof of validity.

Are the JWT and secret saved or uploaded?

The tool processes inputs in page memory, does not upload them, and does not save them to browser storage or send their values to analytics. Old drafts saved by previous versions are removed on opening the tool. Copy claims explicitly writes decoded claims to the system clipboard.

Which JWT text formats are accepted?

Use three compact JWS segments separated by dots, with canonical unpadded Base64url encoding. Header and payload must decode to UTF-8 JSON objects. Leading and trailing whitespace around the complete token is ignored; padding and whitespace inside a segment are rejected. Input is limited to 128 KiB.

Keep browsing