JWT Decoder
Decode, inspect and verify JSON Web Tokens. HS256 signature verification supported. Everything runs in your browser β your tokens are never sent anywhere.
Decode a JWT in three steps.
- 01Paste your token into the JWT input.Use the βload sampleβ button to try the tool with an example HS256 token, or paste any token in the standard
header.payload.signatureformat. - 02Inspect the decoded sections.The header reveals the algorithm and token type. The payload shows all claims with timestamps converted to readable dates. The signature is the cryptographic proof.
- 03(Optional) Verify the signature.For HS256 tokens, paste the secret used by the issuer. The tool computes the expected signature locally and compares it to the one in the token.
What is a JWT, and how does it actually work?
A JSON Web Token (JWT) is a compact, self-contained way to transmit signed data between two parties. Defined in RFC 7519, it's the most common format for stateless authentication tokens in modern web applications and APIs.
A JWT is made of three Base64-URL encoded parts joined by dots: header.payload.signature. The header declares the signing algorithm. The payload carries the claims (data about the user, expiration, etc). The signature is computed over the header and payload, allowing the receiver to verify the token hasn't been altered.
Crucially, a JWT is signed, not encrypted. Anyone holding the token can decode and read its payload β that's exactly what this tool does. The signature only proves authenticity, not confidentiality. Never put secrets inside a JWT payload.
Standard registered claims
issIssuerWho created and signed the tokensubSubjectWhom the token is about (often a user ID)audAudienceWhom the token is intended forexpExpirationTimestamp after which the token is invalidnbfNot beforeTimestamp before which the token is invalidiatIssued atWhen the token was createdjtiJWT IDUnique identifier, useful to prevent replayCommon JWT pitfalls
- ΓAccepting tokens with alg=none β always reject these
- ΓStoring secrets in the payload (it's readable by anyone)
- ΓUsing long-lived tokens without refresh tokens
- ΓConfusing JWT signing keys with API keys β they're not the same
- ΓTrusting the alg header without enforcing it server-side (algorithm confusion attacks)
- ΓPutting personal data in tokens that get logged or cached