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.
Decoded header and payload
This reads the token only. It does not verify the signature against your real key, check revocation, or inspect how your server handles the token.
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
- Paste a JWT.
- Press Analyze.
- Read the grade and work through the findings, most serious first.
- Fix the server and the token issuer, then re-check.
Example
The example token is deliberately weak so you can see the findings.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.<sig for secret "secret">
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.