A JWT is three segments

Most signed JWTs contain a Base64URL-encoded header, a Base64URL-encoded payload and a signature separated by periods. The first two segments are readable, not encrypted.

Decoding is not verification

A decoder can display claims but cannot prove who issued them. Verification must check the signature, allowed algorithm, issuer, audience and time-based claims with trusted key material.

  • Never grant access based on decoded text alone
  • Reject unexpected algorithms
  • Check exp and nbf
  • Avoid pasting production tokens into server-backed websites

Debug with minimal exposure

Use short-lived development tokens, redact identifiers in screenshots and prefer a local browser decoder when a real token must be inspected.

Inspect a token whose signature is deliberately invalid

This synthetic token is intentionally unsigned in any meaningful sense: its final segment is the word signature. JWT Decoder can still expose the header and payload. Successful decoding demonstrates that the segments contain readable data; it does not demonstrate a valid signature or an authenticated user.

Change the sub claim in a locally constructed payload and the decoder will show the changed value as well. Authorization must come from a verifier that checks the permitted algorithm, signature, issuer, audience and time constraints against an application's trusted configuration. Never accept the token's own algorithm label as the entire verification policy.

Input · synthetic JWT
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFkYSIsImlhdCI6MTUxNjIzOTAyMn0.signature
Expected decoded output · not verified
{
  "header": {
    "alg": "HS256",
    "typ": "JWT"
  },
  "payload": {
    "sub": "1234567890",
    "name": "Ada",
    "iat": 1516239022
  },
  "signature": "signature"
}

Separate inspection from authentication

XXF's decoder parses the first two segments and displays the third; it does not validate the token structure for use as a credential or fetch verification keys. It is useful for debugging serialization and claims, not for deciding whether a request should be granted access.

Use a synthetic token when reporting a bug. Even though decoding runs in the tab, a real bearer token can be exposed through a screenshot, clipboard history, browser extension or public issue. Revoke an accidentally shared token through the issuing system rather than assuming that hiding its decoded view invalidates it.

  • Keep real bearer tokens out of bug reports
  • Treat every displayed claim as untrusted
  • Verify signatures in the consuming application
  • Check issuer, audience and time constraints after verification
Primary references

Read the specification

RFC Editor · RFC 7519JSON Web Token↗RFC Editor · RFC 8725JSON Web Token Best Current Practices↗

Put the guide into practice

Open the related browser tools and test the workflow with a synthetic sample

JWT Decoder ↗Unix Timestamp Converter ↗