JWT Decoder & Verifier

Paste a JSON Web Token to inspect its header and payload, check when it expires and verify its signature. Decoding happens locally — your token never leaves the browser.

Runs in your browser
🔒 Your token is decoded and verified locally in your browser. It is never sent to a server, logged or stored.
Header
Payload

Claims

Verify signature (optional)

Your data never leaves your computer. All processing happens 100% locally in your browser.

How to use the JWT Decoder

  1. Paste a JWT (with or without the Bearer prefix) into the Encoded token box, or click Load sample.
  2. Read the decoded header and payload; the badges show the algorithm and whether the token has expired.
  3. Check the Claims table for human-readable exp, iat and nbf times in your local time zone.
  4. Optionally verify the signature: enter the shared secret for HS256/384/512, or paste the public key (PEM or JWK) for RS, PS, ES and EdDSA tokens.

What is a JWT?

A JSON Web Token (JWT, pronounced “jot”, defined in RFC 7519) is a compact, URL-safe string used to transmit claims between parties — most often as an access token or ID token in OAuth 2.0 and OpenID Connect, sent in an Authorization: Bearer … header. It consists of three Base64URL-encoded parts separated by dots:

  1. Header — JSON describing the token, e.g. {"alg":"HS256","typ":"JWT"}.
  2. Payload — JSON with the claims: who the user is, what they may do and when the token expires.
  3. Signature — computed over header.payload with a secret or private key, so any change to the first two parts invalidates it.

Important: the header and payload are only encoded, not encrypted. Anyone holding the token can read them — which is exactly what this decoder does. Never put secrets or sensitive personal data in a JWT payload. (Encrypted tokens exist — JWE, with five parts — but their payload can only be read with the decryption key.)

Registered claims

ClaimNameMeaning
issIssuerWho issued the token (e.g. your auth server URL)
subSubjectThe user or entity the token represents
audAudienceThe API(s) that should accept the token
expExpirationUnix time after which the token must be rejected
nbfNot beforeUnix time before which the token is not valid
iatIssued atUnix time when the token was created
jtiJWT IDUnique ID, useful to prevent replay

Time claims are seconds since 1 January 1970 UTC — not milliseconds, a common bug when generating tokens in JavaScript with Date.now(). The decoder converts them to readable dates; for other timestamps use the Unix Timestamp Converter.

Signature algorithms

HS256/384/512 use HMAC with a shared secret: the same key signs and verifies, so every verifier can also mint tokens. RS256 (RSA), PS256 (RSA-PSS), ES256 (ECDSA P-256) and EdDSA use a private key to sign and a public key to verify — the better choice when several services must validate tokens. Identity providers publish their public keys as a JWKS at a URL like /.well-known/jwks.json; you can paste that JSON here and the key matching the token's kid is selected. Verification uses the browser's Web Crypto API.

Security checklist

  • Always verify the signature on the server — decoding alone proves nothing.
  • Reject alg: none and pin the algorithms you expect, to avoid algorithm-confusion attacks.
  • Check exp, nbf, iss and aud, allowing only a small clock skew.
  • For HS256, use a random secret of at least 256 bits — the Password Generator can create one.

Tools that pair well with the JWT Decoder

  • Base64 Encode / Decode — Convert text to Base64 and back with full UTF-8 support (accents, emoji), switch to URL-safe Base64, or drop a file to get its Base64 string or data URI.
  • Hash Generator — Compute MD5 and SHA hashes of any text or file instantly, create HMAC signatures, and paste an expected checksum to verify a download.
  • URL Encode / Decode — Percent-encode text for safe use in URLs, decode encoded strings back to readable text, and break any URL down into its parts and query parameters.
  • UUID Generator — Create cryptographically random UUIDs (v4) or sortable, timestamp-based UUIDs (v7) in bulk, then copy or download them.

Frequently asked questions

Is it safe to paste my JWT here?
Decoding and verification run entirely in your browser — the token is not sent to any server, stored or put in the URL. Still, treat production tokens like passwords: prefer expired or test tokens, and never share live ones.
Can a JWT be decoded without the secret?
Yes. The header and payload are just Base64URL-encoded JSON, readable by anyone. The secret or key is only needed to verify the signature, i.e. to prove the token is authentic and unmodified.
How do I check if a JWT is expired?
Look at the exp claim — a Unix timestamp in seconds. This tool compares it with your device clock and shows an “Expired” or “Not expired” badge plus the exact time in your time zone.
What is the difference between HS256 and RS256?
HS256 uses one shared secret for signing and verifying (symmetric HMAC). RS256 signs with an RSA private key and verifies with the public key (asymmetric), so verifiers cannot create tokens.
Why does verification fail with the right secret?
Check whether the secret is stored Base64-encoded (tick the option), for stray spaces or line breaks, and that the token was not altered — even one changed character in the header or payload invalidates the signature.

Related tools