Your country

Tools that support it use your country for local currency, number formats, units and paper size. Your choice is saved only in this browser.

Type a name or a two-letter code. Use the up and down arrow keys to move through the countries, Enter to choose one and Escape to close.

JWT Signature Verifier

Check a JWT the way a careful server should: signature, algorithm, keys and every claim.

Free preview, no sign-upIncluded in your pass Pro tool Pro pass: ₹179 / $5.99 for 30 days On this device: nothing is sent
+3 +1 more details No uploadWorks offline once opened Security

Free preview: the verdict and every count, the token’s decoded header and claims, and the first checks of the report (up to 10). Locked until you unlock it: download and copy.

Pro pass ₹179 for 30 days or ₹79 for 1 week, one‑time. Pro pass $5.99 for 30 days or $2.99 for 1 week, one‑time. How to unlock

Try before you buy.

  • Free preview: the verdict and every count, the token’s decoded header and claims, and the first checks of the report (up to 10).
  • Locked until you unlock it: download and copy.
  • Unlock: Pro pass, ₹179 for 30 days or ₹79 for 1 week, a one-time payment that never renews. Unlock: Pro pass, $5.99 for 30 days or $2.99 for 1 week, a one-time payment that never renews.

Ways to unlock shows how to get the full result.

See passes (opens in a new tab)

Printing this result is locked in the free preview.

Token and key

For a JWK Set, the key whose kid matches the token is used. Nothing is uploaded.

Validation rules
Allowed algorithms (none ticked: those the key can verify)

Several allowed values: separate them with commas.

Result

Paste a token and a key to check them.

    Next steps Done. What next?

    Start over

    A Pro pass unlocks the full result. See passes

    All security & privacy tools

    About the JWT Signature Verifier

    Decoding a JWT shows what it claims; verifying it shows whether to believe it. Paste a token and the key you trust — a shared secret for HS256, the issuer’s PEM public key or certificate, a JWK, or the issuer’s JWK Set (the key is chosen by the token’s kid) — and the page checks the signature with your browser’s Web Crypto, then everything a careful relying party checks: an algorithm allow-list, alg: none, algorithm confusion (an HS token checked with a public key), secrets shorter than RFC 7518 §3.2 allows, exp, nbf and iat with clock skew, the issuer, the audience and the type.

    Every check comes with the rule behind it — RFC 7519, RFC 7515, RFC 7518 and the JWT Best Current Practices of RFC 8725 — and the risky header parameters are named: jku and x5u URLs, an embedded jwk, unknown crit entries and a kid that looks like a path or SQL. HS256, HS384, HS512, RS256–RS512, PS256–PS512, ES256–ES512 and EdDSA (Ed25519) are supported. Nothing is uploaded: the token, the secret and the keys stay in your browser.

    Without a pass you see a free preview: the verdict, every count and the token’s header and claims, with the first checks of the report. The whole report, and copying or downloading it, unlock with a Pro pass.

    How to use it

    1. Paste the token (a leading Bearer is removed), or pick an example.
    2. Paste the key you trust: the shared secret for HS256/384/512 (and say whether it is text, Base64 or hex), or the issuer’s public key as PEM, a certificate, a JWK or the whole JWK Set from its jwks_uri.
    3. Set the rules your application uses: the allowed algorithms, the expected issuer and audience, the type, the clock skew, whether exp is required and the maximum age.
    4. Read the verdict and the checks, worst first in each group. With a pass or after unlocking this result, copy or download the report.

    Examples

    An access token from an identity provider
    Input
    eyJhbGciOiJSUzI1NiIsImtpZCI6…  · the provider’s JWK Set · issuer https://login.example.com/ · audience api://orders
    Result
    Valid: the RS256 signature checks out with the key whose kid matches, the issuer and audience match, it expires in 52 min
    The classic algorithm-confusion attack
    Input
    A token with "alg": "HS256" checked with the server’s RSA public key
    Result
    Algorithm confusion: an HS token must never be verified with a public key — rejected before any signature check
    A weak demo secret
    Input
    An HS256 token signed with the secret "secret"
    Result
    Signature valid, but rejected: 6 bytes is shorter than the 32 bytes RFC 7518 §3.2 requires, and the secret looks human-made (RFC 8725 §3.5)

    Common uses

    • Debugging "invalid signature" or "jwt expired" errors between an identity provider and your API.
    • Checking that your own token issuer sets the algorithm, kid, issuer, audience, type and expiry that verifiers expect.
    • Testing a JWT library or gateway configuration against the RFC 8725 attacks (alg none, algorithm confusion, weak secrets, jku).
    • Seeing which key in a JWKS a token was signed with, and spotting a key rotation the verifier has not picked up.

    What a careful verifier checks

    • The algorithm: accept only the algorithms you expect for your key, never whatever the header says (RFC 8725 §3.1); reject none (RFC 8725 §3.2, RFC 7518 §3.6).
    • The key: the issuer’s key, chosen by kid from its JWK Set, of the right type for the algorithm and not marked for another algorithm or for encryption (RFC 7517 §4.2–4.4).
    • The signature over the first two parts, exactly as sent (RFC 7515 §5.2).
    • Time: exp in the future and nbf in the past, allowing a small clock skew; iat not in the future (RFC 7519 §4.1.4–4.1.6).
    • Who: iss is the issuer you expect and the key belongs to it (RFC 8725 §3.8); aud names your service (RFC 8725 §3.9).
    • What kind: an explicit typ such as at+jwt keeps an ID token from being used as an access token (RFC 8725 §3.11, RFC 9068).

    Attacks the checks catch

    • alg: none — an unsigned token that a careless library accepts.
    • Algorithm confusion — a token switched from RS256 to HS256 and signed with the server’s public key as the HMAC secret; a verifier that takes the algorithm from the token accepts it (RFC 8725 §2.1).
    • Weak secrets — HS256 needs at least 256 bits (RFC 7518 §3.2); a word or a short password can be guessed offline from a single token, and RFC 8725 §3.5 forbids human-memorable passwords as HMAC keys.
    • Keys from the token — jku, x5u, jwk and x5c let a token point to or carry its own key; following them blindly lets an attacker supply the key (RFC 8725 §3.10).
    • kid injection — a kid such as ../../dev/null or one with SQL in it attacks key lookups that trust it (RFC 8725 §3.10).
    • Unknown crit — a token that marks a header parameter as critical must be rejected when the verifier does not understand it (RFC 7515 §4.1.11).

    When a valid-looking token fails

    • Invalid signature with HS256: the secret is often meant as Base64 (its decoded bytes) while you typed it as text, or the other way round — the page tries both and says which matches — or a line break was copied with it.
    • Invalid signature with RS256/ES256: the issuer rotated its keys and the kid points to a new one; fetch its JWK Set again. An ES256 signature of about 70 bytes is DER, which JWS does not allow (RFC 7518 §3.4 requires 64 raw bytes).
    • Expired, not valid yet or issued in the future: compare the device clocks; a minute or two of skew is normal.
    • Wrong audience or issuer: they are compared exactly, so https://login.example.com and https://login.example.com/ differ.

    Limitations

    • Signed tokens only (JWS compact form): encrypted JWE tokens are recognised but not decrypted. Detached and JSON-serialized JWS are not read.
    • ES256K (secp256k1) and Ed448 cannot be checked in browsers; EdDSA needs Ed25519 support in Web Crypto (current browsers).
    • The page never fetches keys: paste the JWK Set from the issuer’s jwks_uri yourself. It checks the key you give, not whether that key really belongs to the issuer.
    • Times are checked against your device clock unless you choose another time; nested JWTs (cty "JWT") are pointed out, not opened.

    Privacy

    On this device: nothing is sent

    Your token, secret and keys are checked only in this tab with your browser’s Web Crypto: nothing is uploaded, logged or stored. Treat live tokens and secrets as passwords anyway — they work until they expire.

    Frequently asked questions

    What do I get without a pass?

    Without a pass, JWT Signature Verifier shows the verdict and every count, the token’s decoded header and claims, and the first checks of the report (up to 10). Until you unlock it, the result can’t be downloaded or copied. A Pro, Premium or Ultimate pass, a one-time payment that never renews, unlocks the full result. The pricing page lists the passes and their prices.

    What is the difference between this and a JWT decoder?

    A decoder (like the JWT Decoder) shows the header and claims, which anyone can write. This page proves who signed them and checks them against your rules — algorithm, key, issuer, audience, time — and against the attacks of RFC 8725.

    Which key do I paste for a token from Google, Microsoft, Auth0 or Okta?

    Their public JWK Set: open the issuer’s /.well-known/openid-configuration, follow jwks_uri, and paste the whole {"keys":[…]}. The page picks the key whose kid matches the token’s header.

    Why does my HS256 token fail although the secret is right?

    Usually the secret’s encoding: some systems use the Base64-decoded bytes of the secret, others its text. Switch the encoding (the page also tries the others and tells you when one matches). A space or line break copied with the secret also breaks it.

    How much clock skew should I allow?

    A small amount — commonly 30 to 120 seconds — covers clocks that are slightly off without keeping expired tokens alive for long. The page uses 60 seconds unless you change it.

    Is it safe to paste a production token here?

    The check runs in your browser and nothing is sent anywhere. Still, a token is a bearer credential until it expires: prefer test tokens, and do not paste tokens into tools you do not trust.

    Quick answers and tool search

    Type to search tools or to get a quick answer, for example 18% of 2500. Use the up and down arrow keys to move through the results, Enter to choose, and Escape to close.