JWT Anatomy: Header, Payload, Signature
Decode base64url parts and understand each JWT field.
JWT Anatomy: Header, Payload, Signature is a free Cryptology Academy lesson on CoddyKit — lesson 1 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Cryptology Academy learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
What Is a JWT?
A JSON Web Token (JWT) is a compact, URL-safe token format defined in RFC 7519. It encodes claims (assertions about a subject) and a cryptographic signature in a single string, enabling stateless authentication.
Three-Part Structure
A JWT has the form: base64url(header).base64url(payload).base64url(signature). The dot separates the parts. The header and payload are readable (base64url, not encrypted). Only the signature is cryptographic.
Header
The header is a JSON object: {"alg":"HS256","typ":"JWT"}. alg specifies the signing algorithm (HS256, RS256, ES256, none). typ is always "JWT". Additional headers include kid (key ID) for key selection.
Payload / Claims
Standard registered claims: iss (issuer), sub (subject), aud (audience), exp (expiry Unix timestamp), nbf (not before), iat (issued at), jti (JWT ID for revocation). Custom claims are any additional key-value pairs.
Decoding a JWT
import base64, json token = "eyJ..." parts = token.split(".") header = json.loads(base64.urlsafe_b64decode(parts[0]+"==")) payload = json.loads(base64.urlsafe_b64decode(parts[1]+"==")) print(header, payload)
Signature Verification
For HS256: HMAC-SHA256(base64url(header)+"."+base64url(payload), secret). The receiver recomputes this and compares to the signature part. If they match and the token is not expired, the token is valid.
Asymmetric Signatures
For RS256: the private key signs the header.payload string using RSA-SHA256. Any party with the public key can verify without the private key. Public keys are distributed via JWKS (JSON Web Key Set) endpoints (e.g., /.well-known/jwks.json).
Base64url Encoding
Base64url replaces + with - and / with _, and omits = padding. This makes JWTs safe in URLs, HTTP headers, and cookies without percent-encoding. The raw bytes are still not encrypted — just encoded.
JWTs Are Not Encrypted By Default
A JWT payload is visible to anyone who base64url-decodes it. Never put secrets (passwords, SSNs) in a JWT payload unless you use JWE (JSON Web Encryption) with the "enc" algorithm for actual encryption.
Token Lifetime
Set exp to a short duration (15-60 minutes for access tokens). Long-lived JWTs accumulate risk — if stolen, they remain valid until expiry. Use refresh tokens (stored securely) to issue new short-lived access tokens.
JWKS Discovery
Auth providers (Auth0, Keycloak, Google) publish a JWKS URL. The verifier fetches public keys by kid, caches them, and verifies signatures without contacting the issuer per-request. Key rotation updates the JWKS endpoint.
Quick Check
Which part of a JWT contains the cryptographic signature?
Recap
A JWT is three base64url-encoded JSON parts: header (algorithm), payload (claims), and signature. The payload is readable — not encrypted. Next: choosing between HS256 and RS256.
Frequently asked questions
Is the “JWT Anatomy: Header, Payload, Signature” lesson free?
Yes — the full text of “JWT Anatomy: Header, Payload, Signature” is free to read here on the web, and the Cryptology Academy course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Cryptology Academy course, upgrade to CoddyKit PRO.
What will I learn in “JWT Anatomy: Header, Payload, Signature”?
Decode base64url parts and understand each JWT field. You practise Cryptology Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Cryptology Academy?
No prior experience is required. Cryptology Academy on CoddyKit is structured for beginners through advanced learners; this is — lesson 1 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “JWT Anatomy: Header, Payload, Signature” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Cryptology Academy lesson?
Yes. Every Cryptology Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- JWT Anatomy: Header, Payload, Signature
- HS256 vs RS256: Symmetric vs Asymmetric JWTs
- JWT Vulnerabilities: alg=none & Key Confusion
- Secure JWT Implementation Best Practices