Decode does not equal trust
A JWT can be decoded without proving it should be accepted. Claims are just data until signature and policy checks pass.
Always keep decoding, cryptographic verification, and application authorization as separate decisions.
- Decode header and payload.
- Verify with the correct algorithm and key material.
- Apply issuer, audience, expiration, and clock-skew policy.
HS vs RS/ES verification
HS algorithms use a shared secret. RS and ES algorithms use asymmetric keys and must be verified with the matching public key or certificate.
Verification fails most often because of algorithm mismatch, wrong key, or token alteration.
- HS256/384/512 -> shared secret.
- RS256/384/512 -> RSA public key or certificate.
- ES256/384/512 -> EC public key or certificate.
Fast JWT incident triage
When authentication breaks, isolate whether the issue is token format, signature mismatch, or claim policy failure.
This separation saves time and prevents risky hotfixes in auth code.
- Check token structure first.
- Verify cryptographic signature next.
- Then inspect exp, nbf, iss, aud, and subject mapping.
FAQ
If signature verifies, is the token valid for my app?
Not automatically. You still need issuer, audience, expiration, revocation, and authorization checks in your application.
Why does RS256 fail when HS256 works?
They use different key models. RS256 requires a matching RSA public key, not the HS shared secret.
Does alg=none mean anything secure?
No. Tokens with alg=none are unsigned and should be treated as untrusted unless your system explicitly supports that mode for a controlled reason.