Skip to content

ZeroTrace OSINT

JWT Decoder

Parse JWT tokens, verify signatures against pasted keys or fetched JWK Sets, surface alg-confusion warnings.

The JWT decoder takes a JSON Web Token, parses the three parts (header / payload / signature), and surfaces every claim with annotations from a built-in claims glossary. Optionally it verifies the signature against a pasted public key or against a JWK Set fetched from the issuer's .well-known/jwks.json.

What you get

For any JWT:

SectionWhat it shows
Headeralg, typ, kid, custom header fields
Payload (claims)Every claim with annotations from the standard JWT claims registry
SignatureRaw signature bytes, base64url-encoded
Token validity windowiat, nbf, exp with freshness chip
Standard-claim glossaryiss, sub, aud, jti, iat, exp, nbf annotated automatically
Custom claimsSurfaced as-is (no annotation; you interpret them)
Signature verificationOptional: verify against pasted public key or fetched JWK Set
Algorithm confusion warningFlag if alg is unusual or asymmetric algorithm with key size that fits a symmetric secret

Standard-claim glossary

The decoder annotates the canonical claims:

ClaimMeaning
issIssuer — who created the token
subSubject — who the token is about
audAudience — who the token is for
expExpiry — when the token stops being valid
nbfNot before — when the token starts being valid
iatIssued at — when the token was created
jtiUnique token ID — for revocation

Custom claims (anything not in the standard registry) are surfaced as-is.

Validity window

The decoder evaluates the token against the current time:

  • iat (issued at) — when the token was created.
  • nbf (not before) — when the token starts being usable.
  • exp (expiry) — when the token stops being valid.

A token currently outside its validity window is flagged.

Signature verification

Two verification modes:

ModeWhen to use
Paste public keyYou have the issuer's PEM-encoded public key
Fetch JWK SetYou have the issuer's URL — the decoder fetches <issuer>/.well-known/jwks.json and finds the matching key by kid

Verification supports the common JWT algorithm families: HS256/384/512 (HMAC), RS256/384/512 (RSA), ES256/384/512 (ECDSA), PS256/384/512 (RSA-PSS), EdDSA.

A successful verification confirms:

  • The token was signed by the holder of the corresponding key.
  • The token has not been modified since signing.

A failed verification means one or the other is false. The decoder tells you which.

Signature verification confirms the token was signed by some key — it does not by itself prove the token is "valid." A token signed by an attacker-controlled key passes verification with that attacker's key. Always verify against a key you trust came from the legitimate issuer.

Algorithm confusion warning

A classic JWT vulnerability: a server expects RS256 but accepts HS256 with the public key as the symmetric secret. The decoder flags this when:

  • The token's alg is symmetric (HS256/384/512).
  • The token's key looks like it could be a public key (PEM-shaped).

This is a sanity check, not a verdict — many legitimate setups use symmetric keys. But the warning catches the misconfiguration that the most common JWT bypass exploits.

None-algorithm warning

A token with alg: none is unsigned. The decoder flags this prominently — accepting alg: none is the other classic JWT vulnerability.

Pivots

Click on...Pivot to
iss URLURL parser, site analysis
aud URLURL parser
Custom URL claimURL parser
Email-shaped claimEmail analyzer

Bulk JWT decode

Bulk paste accepts many tokens. Aggregate table shows per-token issuer / subject / expiry / valid-now status — useful for triaging a log file full of tokens.

Sources

  • All decoding is local.
  • JWK Set fetches go to the URL you provide — the URL is named on the result.

Command Palette

Search for a command to run...