Every token is evidence · every verdict names its proof
Decoded is not verified.
A readable header and payload prove only that two Base64URL segments contain JSON. Trust arrives later—from an expected algorithm, the right key, a valid time window, and your issuer/audience policy.
Header
{ "alg": "HS256", "typ": "JWT" }Payload
{ "sub": "123", "aud": "devsexy-api", "exp": 1766073600 }Signature
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5cDecode and verify a public test token
Both examples use the same public HS256 fixture. Compare a readable payload with verification under an explicit algorithm, key, issuer, audience, and time.
Loading an example replaces the token and options, including the key. This public test fixture grants no access; never use its key for a real application.
Read claims without trusting the signature
Decode · HS256 · no key. The fixture expired in 2024; decoding still displays its claims.
Input
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkZW1vLXVzZXIiLCJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlLnRlc3QiLCJhdWQiOiJkZXZzZXh5LWRlbW8iLCJuYmYiOjE3MTAwMDAwMDAsImV4cCI6MTcxMDAwMzYwMH0.gAP2idduo9EHFyecHJohqwzl7F3g8Bvp3xDvVWyCHsI
The subject is demo-user. The result explicitly says the signature was not checked.
"sub": "demo-user" Signature: not checked — decoding never proves authenticity
Verify at a fixed time inside the validity window
Verify · HS256 · public test secret: devsexy-public-example-key-do-not-use-in-production · issuer https://issuer.example.test · audience devsexy-demo · verification time 1710001800 epoch seconds · zero clock skew.
Input
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkZW1vLXVzZXIiLCJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlLnRlc3QiLCJhdWQiOiJkZXZzZXh5LWRlbW8iLCJuYmYiOjE3MTAwMDAwMDAsImV4cCI6MTcxMDAwMzYwMH0.gAP2idduo9EHFyecHJohqwzl7F3g8Bvp3xDvVWyCHsI
Verification passes at the fixed historical instant. Clear the verification time to check today: this fixture is expired. This does not prove current authorization.
Signature: verified with the selected HS256 key, claim, and clock policy Issuer policy: https://issuer.example.test Audience policy: devsexy-demo
Trust ladder
Each rung proves only the next fact.
Compact shape
Exactly three non-empty URL-safe segments
JSON decoded
Header and claims are readable—not trustworthy
Signature verified
Integrity under an expected algorithm and key
Time accepted
exp / nbf with an explicit clock-skew policy
Issuer & audience accepted
Application configuration matches the claims
Domain policy accepted
Roles, tenant, scope, nonce, and revocation rules pass
Algorithm / key contract
The token’s alg field is input, not policy.
HS256 / 384 / 512Shared secretSigner and verifier know the same key
Supported in this workbench
RS256 / 384 / 512 · PS256 / 384 / 512RSA PEMPKCS#8 signs; X.509, SPKI, or PKCS#8 verifies
Supported; key and algorithm must match
ES256 / 384 / 512EC PEMPKCS#8 signs; X.509, SPKI, or PKCS#8 verifies
Supported; curve and algorithm must match
JWK / JWKS / none / EdDSANot acceptedNo remote key lookup or unsecured JWT
Outside this workbench’s allowlist
NumericDate clock
JWT time claims are epoch seconds.
NOW · 1,716,073,600
iat1,716,070,000Issued 60 minutes agonbf1,716,072,700Active for 15 minutesexp1,716,075,400Expires in 30 minutesMilliseconds accidentally supplied as seconds land tens of thousands of years away. Clock skew is a deliberate verifier setting, not a reason to ignore expiry.
Issuer & audience checkpoint
A valid signature from the wrong authority is still rejection.
isshttps://id.example.test/Exact trusted issuer match
aud["devsexy-api", "account"]At least the required audience under your policy
tenantproduction-euPrivate claim checked by domain policy
scopetools:readAuthorization still belongs to the resource server
Debugger threat desk
Handle the debugger like a bearer-token workbench.
Bearer exposure
HIGHTokens in URLs, screenshots, logs, clipboard history, and tickets can be replayed.
Weak HMAC secret
HIGHShort or guessable shared secrets can be brute-forced offline.
Algorithm confusion
CRITICALPin an allowlist; never let attacker-controlled alg select policy.
Untrusted kid / JWK URL
HIGHNever turn header key hints into unrestricted file or network lookup.
Signing in a browser
REVIEWUse test keys only; production signing keys belong in controlled infrastructure.
Inspect the evidence around a token
Use the Base64 tool for encoded text that is not a complete three-part JWT.
Check the human-readable UTC instant without confusing seconds with browser milliseconds.
Review query escaping separately; a URL parser does not authenticate a bearer token.
Use the offline toolbox for repeated inspection with test credentials.