100% Client-side  |  Nothing sent to server  |  Supports HS256 • HS384 • HS512

JWT Decoder & Verifier

Decode JSON Web Tokens instantly. Inspect header, payload and claims. Verify HMAC signatures (HS256/384/512) with your secret key. Runs 100% client-side.

Token structure
..
Header

                            
Payload

                            
Claims analysis
Signature (Base64URL)

                            
Verify HMAC signature (HS256 / HS384 / HS512)

What is a JWT?

A JSON Web Token (JWT) is a compact, URL-safe token format used to securely transmit information between parties as a JSON object. JWTs are widely used for authentication and authorization in web applications and APIs.

A JWT consists of three Base64URL-encoded parts separated by dots:

Header.Payload.Signature

JWT Structure

PartContainsExample
HeaderAlgorithm & token type{"alg":"HS256","typ":"JWT"}
PayloadClaims (user data){"sub":"123","name":"Alice","iat":1516239022}
SignatureIntegrity verificationHMACSHA256(base64(header)+"."+base64(payload), secret)

Standard Claims

ClaimNameDescription
issIssuerWho issued the token
subSubjectWho the token refers to (usually user ID)
audAudienceWho the token is intended for
expExpirationUnix timestamp — token is invalid after this time
nbfNot BeforeUnix timestamp — token is invalid before this time
iatIssued AtUnix timestamp — when the token was issued
jtiJWT IDUnique identifier for this token

Supported Algorithms

AlgorithmTypeKeyNotes
HS256HMAC-SHA256Shared secretMost common — this tool can verify
HS384HMAC-SHA384Shared secretThis tool can verify
HS512HMAC-SHA512Shared secretThis tool can verify
RS256RSA-SHA256Public/private keyDecode only (verification requires public key)
ES256ECDSA-SHA256Public/private keyDecode only

Security Warning

Never paste production JWTs containing sensitive user data into online tools you don't control. This tool runs entirely in your browser — no data is sent to any server — but always be careful with real tokens.

Common JWT Errors and What They Mean

Error / SymptomLikely CauseFix
invalid signatureWrong secret/key, or the token was re-signed after the payload was editedConfirm the exact secret used by the issuer; check for trailing whitespace or encoding mismatches
jwt expiredexp claim is in the past relative to server timeCheck for clock drift between issuer and verifier, or re-authenticate to get a fresh token
jwt malformedToken doesn't have exactly 3 dot-separated Base64URL partsCheck for truncation (e.g. a cookie or header size limit cutting off the token)
invalid algorithmHeader alg doesn't match what the verifying library expectsNever accept alg: none from client input — this is a known JWT bypass technique
Payload decodes but looks like garbageToken is actually a JWE (encrypted), not a signed JWT (JWS)JWE has 5 dot-separated parts, not 3, and requires a decryption key, not just a verification secret

Frequently Asked Questions

Is it safe to paste a real JWT into this decoder?

This tool decodes and verifies entirely in your browser using the Web Crypto API — the token and secret are never transmitted to any server. That said, treat production tokens carefully: a decoded JWT's payload is plainly readable, so avoid pasting tokens into any tool while screen-sharing or on a shared machine.

Why can this tool verify HS256 but not RS256 signatures?

HS256/384/512 use a single shared secret, so verification just means re-computing the HMAC with the secret you provide. RS256 and ES256 use a public/private key pair — verifying them requires the issuer's public key, not a secret, so this tool decodes RS256/ES256 tokens but does not verify their signature.

Why does my JWT show as expired when I think it shouldn't be?

The exp claim is a Unix timestamp in seconds, compared against the current time in UTC. A common cause of unexpected expiry is a server issuing tokens with a clock that has drifted, or code that multiplies or divides the timestamp by 1000 by mistake when converting between seconds and milliseconds.

Can a JWT be edited without invalidating it?

No — the header and payload can be decoded and read by anyone, but any change to them changes the signature check. If the signing secret or private key is unknown, an edited token will fail verification. This is why sensitive data should still be encrypted, not just signed, if it must not be readable.

References

  1. RFC 7519 — JSON Web Token (JWT)
  2. RFC 7515 — JSON Web Signature (JWS)
  3. jwt.io — Introduction to JWT