JWT Decoder & Verifier
Decode a JSON Web Token and verify its signature and expiry.
Paste a JSON Web Token to see its header and payload decoded, with the timestamp claims rendered as readable dates and expiry checked against the current time.
Add the signing secret or public key to verify the signature as well. Leave it blank and the token is only decoded — which is all you need to read a token, and is not enough to trust one.
How it works
A JWT is three base64url segments joined by dots: header, payload and signature. The first two are plain JSON. They are encoded, not encrypted, so anyone holding the token can read every claim inside it without a key of any kind. This is the single most misunderstood thing about JWTs — never put anything in a payload that the bearer should not see.
The signature is what makes a token trustworthy. It covers the header and payload together, so changing a single character of either invalidates it. With HS256 the signature is an HMAC and the same shared secret both signs and verifies, meaning every service that can check a token can also mint one. With RS256 and ES256 the private key signs and the public key verifies, so verifiers cannot forge — which is why asymmetric algorithms are the right choice the moment more than one service is involved.
Two claims control validity in time. exp is the expiry and
nbf the "not before"; both are Unix timestamps in seconds, and both
are checked below against the current time. Because a JWT is self-contained,
there is no way to revoke one before it expires without keeping server-side
state — which is why sensible access tokens are short-lived and paired with a
refresh token.
This tool never takes the algorithm from the token's own header. That habit is
the root of the classic JWT attacks: alg: none, where a library
accepts an unsigned token as valid, and algorithm confusion, where an attacker
takes an RS256 public key, re-signs the token as HS256 using that public key as
the HMAC secret, and a naive verifier accepts it. You choose the algorithm here;
if the header disagrees, that is reported as a finding rather than obeyed.
Frequently asked questions
Is decoding a JWT the same as verifying it?
No, and conflating them is the usual security bug. Decoding just base64-decodes two JSON objects and needs no key at all. Verifying checks the signature with a secret or public key, which is the only step that proves the claims were not edited in transit.
Is it safe to paste a token here?
Treat any live token as a password. This page does not store or log tokens, but a valid token grants whatever access it was issued for. If it is a production credential, decode it locally, or rotate it afterwards.
Why can I read the payload without a key?
Because a JWT is signed, not encrypted. base64url is an encoding, not a cipher. If claims genuinely need to be hidden from the bearer, the specification for that is JWE — or simpler, keep the data server-side and put only an opaque identifier in the token.
What is the alg:none attack?
A forged token whose header declares no algorithm and whose signature is empty. Libraries that trusted the header to select the algorithm would accept it as valid. Always pin the expected algorithm in your verifier rather than reading it from the token.
HS256 or RS256?
HS256 is fine when one service both issues and verifies tokens. Use RS256 or ES256 as soon as a second service verifies them, because the shared secret in HS256 lets every verifier also forge tokens. ES256 gives equivalent strength to RS256 in a much smaller signature.
How do I revoke a JWT?
You cannot, in the general case — that is the trade-off for a stateless token. The practical answers are short expiry times with refresh tokens, a server-side denylist of token identifiers, or a per-user token version that invalidates everything issued before a password change.
Related tools
Base64 Encode / Decode
Encode text to Base64 or decode it back, including URL-safe Base64.
Developer UtilitiesJSON Formatter
Format, validate and minify JSON with precise error locations.
Developer UtilitiesHash Generator
Generate MD5, SHA-1, SHA-256, SHA-512, SHA-3 and CRC32 hashes at once.
Developer UtilitiesBcrypt Generator & Verifier
Hash a password with bcrypt or Argon2, or check one against a hash.
SecurityUnix Timestamp Converter
Convert Unix timestamps to dates and back, in any timezone.
Developer UtilitiesUUID Generator
Generate UUID v4, time-ordered UUID v7, or ULIDs in bulk.
Developer UtilitiesNeed hosting that just works?
Free SSL, daily backups and 24×7 support on every Loudhost plan.