go-supertools
Security & Privacy Tools

JWT Security Analyzer

Grade a JWT for weaknesses: alg none, key-injection headers, missing or long-lived claims, sensitive data, and well-known weak HMAC (HS256/384/512) secrets.

Runs in your browser Your input never leaves your device.

The token stays in your browser. It is only read and graded; nothing is sent anywhere.

Report a problem with this tool

About this tool

This grades a JSON Web Token against common mistakes and gives it a letter from A to F. It decodes the token with the same engine as this site's JWT decoder, then runs a set of checks. The most serious is alg:none, an unsigned token that proves nothing; a server that accepts it trusts forged tokens, so it scores F. It flags the header fields jku, x5u and jwk, which point a trusting server at an attacker's key, and a kid value that contains path-traversal or injection characters. In the payload it looks for a missing exp (a token that never expires), a missing aud (which lets a token be replayed against another service that shares the key), a missing iss, iat or sub, an exp that is not a number, and a lifetime that is longer than a typical access token (a month or more is marked high; measured from issued-at to expiry, or from now to expiry when there is no issued-at). It warns when the payload seems to contain a password, key or other secret, because a JWT payload is only base64, not encryption, and anyone holding the token can read it. For HMAC tokens (HS256, HS384 and HS512) it also tries a short built-in list of well-known weak secrets (framework defaults, tutorial values, classic guesses) entirely in your browser; if one verifies the signature, the token can be forged by anyone and scores F. That list is small and illustrative, not a cracking dictionary, and you can switch the test off. We checked the weak-secret detection by signing tokens with PyJWT and with Node's HMAC and confirming the tool finds exactly the secrets that really sign them, and no others. This is a static review of one token: it does not verify the signature against your real key, check revocation, or see how your server handles the token. Nothing is sent anywhere.

How to use it

  1. Paste a JWT.
  2. Press Analyze.
  3. Read the grade and work through the findings, most serious first.
  4. Fix the server and the token issuer, then re-check.

Example

The example token is deliberately weak so you can see the findings.

Input
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.<sig for secret "secret">
Result
Grade F — signed with a well-known weak secret "secret"; no exp; no aud

Common problems

It says a token is weak but my server rejects it anyway
Good. The grade is about the token and its issuer, not whether your server happens to catch the problem. Fix the issuer so bad tokens are never minted.
The weak-secret test found nothing but my secret is short
The built-in list is small and only catches well-known values. A short but unlisted secret is still weak; use a long random one (at least 32 bytes).
It cannot read my token
This reads signed tokens (JWS) with three dot-separated parts. Five parts means an encrypted token (JWE), which this does not open.