The Three Parts of a JWT
A JSON Web Token is three Base64Url-encoded segments joined by dots. The first two are plain JSON once decoded; the third is a cryptographic signature, not decodable data.
Structure
Header: algorithm + token type
Payload: claims (the actual data)
Signature: HMAC or RSA/ECDSA over header + payload
Base64Url is a URL-safe variant of standard Base64 — it replaces + and / with - and _ so the encoded token can appear directly in a URL or header without further escaping, and it usually omits the trailing = padding characters that standard Base64 requires.
Decoding Is Not Verifying
This is the single most important thing to understand about JWTs, and the most common source of security mistakes involving them.
The payload is encoded, not encrypted
Anyone holding a JWT can decode and read its full payload without any secret, exactly as this tool does. Never put genuinely secret data — a password, a full credit card number — inside a JWT payload, since it is readable by design.
The signature is what makes it trustworthy
Verifying the signature — checking it against the secret (HMAC) or public key (RSA/ECDSA) that created it — is what confirms the header and payload have not been altered since issuance. A decoder shows you the signature exists; it does not and cannot confirm the signature is valid.
A forged token still decodes cleanly
Anyone can hand-craft a header and payload, Base64Url-encode them, and attach any signature-shaped string — it will decode without error. Only checking the signature against the correct key distinguishes a genuine token from a forged one, which is why server-side verification is not optional.
Standard Claims Worth Recognising
The JWT specification defines a small set of standard, optional claim names, all three characters long by convention, which most tokens include alongside their own custom claims.
exp (expiration time) and iat (issued at) are both Unix timestamps in seconds, which this tool converts to a readable date automatically. Other common standard claims include sub (subject — usually a user ID), iss (issuer), and aud (audience — who the token is intended for). Anything beyond these is application-specific and defined by whichever service issued the token.