JWT / authentication error guide

Separate JWT authentication errors by expiry, audience, and signature

Do not mistake a decoded payload for authentication. Check exp, issuer, audience, signature, and syntax as separate boundaries.

Separate decoding from authentication

A readable header and payload do not prove a valid signature. Signature verification needs the relying service's trusted key and algorithm configuration; issuer and audience must also match the receiving contract.

header.payload.signature
exp / iat  → time claims
iss         → issuer contract
aud         → service audience contract
signature   → separate verification
BoundaryWhat to check
exp / iatCheck expiry and future issued-at separately from signature verification.
issCheck that the issuer is allowed by the receiving service.
audCheck that the token targets the service's audience contract.
SignatureDo not use an unverified decode as authentication. Do not fetch JWKS or guess keys here.
SyntaxReject an invalid three-part, base64url, or JSON structure fail-closed.

Do not enter secrets

Do not paste a production JWT, refresh token, cookie, or signing secret into this guide. For support, use a fixture or a fully harmless example and keep its contents out of the confirmation note.

This guide and the existing inspector only decode locally. They do not verify signatures, retrieve JWKS, check revocation, or send data externally.

Review cases

caseoutcomecheck
expired-or-futureattentionCheck exp/iat only; do not call the token signature-verified.
issuer-audiencemismatchCompare iss and aud with the service contract.
signature-unverifiedreject-as-authDo not authenticate from decoded output; return to key and algorithm configuration.
malformed-tokenrejectDo not treat invalid syntax or JSON as success.

Use a safe fixture

Use the existing JWT inspector when you need to view header, payload, or time claims locally. This guide is not an authenticator; it supplies an error classification and sharing boundary.

English JWT inspector / 日本語のJWT inspector