Home › Developer Tools › JWT Decoder

JWT Decoder

Paste a JSON Web Token to see its header, payload and claims in plain language, with readable dates and a live expiry countdown. Optionally verify the signature with a secret or public key. Everything stays in your browser.

Decoded locally. Your token is never sent anywhere.
Advertisement

How to use the JWT Decoder

  1. Paste your JWT into the box. A leading Bearer is removed automatically.
  2. Read the decoded parts: the header shows the algorithm, the payload shows every claim as formatted JSON.
  3. Check the claims table for readable issue, not-before and expiry dates and the live countdown.
  4. Verify the signature (optional): type the shared secret for HS256/384/512 or paste the public key for RS, PS, ES or EdDSA tokens, then press Verify signature.
  5. Copy the header or payload JSON with one click.

Anatomy of a JSON Web Token

A signed JWT (a JWS in compact form) is three base64url strings joined by dots: header.payload.signature. Base64url is ordinary base64 with - and _ instead of + and / and no = padding, which makes the token safe for URLs and HTTP headers.

PartContainsExample (decoded)
HeaderThe signing algorithm (alg), token type (typ) and sometimes a key ID (kid){"alg":"HS256","typ":"JWT"}
PayloadThe claims: who the token is about, who issued it, for whom, and when it is valid{"sub":"42","exp":1767225600}
SignatureThe algorithm applied to base64url(header) + "." + base64url(payload) with a secret or private keyRaw bytes, base64url encoded

Because the header and payload are only encoded, never put passwords or other secrets in a JWT payload unless the token is also encrypted (JWE).

Registered claims and time values

RFC 7519 defines seven registered claim names. Time claims are NumericDate values: whole seconds since 1 January 1970 UTC, not milliseconds. For example exp: 1767225600 is 1 January 2026 00:00:00 UTC.

ClaimNameWhat servers check
issIssuerMatches the expected identity provider
subSubjectThe user or client the token represents
audAudienceContains this API's identifier, otherwise reject
expExpiration timeCurrent time is before exp (often with a small clock-skew allowance)
nbfNot beforeCurrent time is at or after nbf
iatIssued atUsed to compute token age
jtiJWT IDUnique ID, can be stored to block replays

Signing algorithms compared

algTypeKey needed to verifyTypical use
HS256 / HS384 / HS512HMAC with SHA-2The same shared secret used to signOne service that both issues and checks tokens
RS256 / RS384 / RS512RSA PKCS#1 v1.5RSA public keyOAuth and OpenID Connect providers
PS256 / PS384 / PS512RSA-PSSRSA public keyModern RSA deployments
ES256 / ES384 / ES512ECDSA on P-256 / P-384 / P-521EC public keyShort signatures, mobile and IoT
EdDSAEd25519Ed25519 public keyFast, modern signatures
noneUnsignedNothingNever accept in production

An HMAC secret for HS256 should be at least 32 random bytes. Short, guessable secrets can be brute-forced offline from any captured token.

Frequently asked questions

What is a JWT?

A JSON Web Token is a compact string with three base64url parts separated by dots: a header that names the signing algorithm, a payload of claims such as the user ID and expiry time, and a signature that proves the first two parts were not changed.

Is it safe to paste my token here?

Yes. The decoder runs entirely in your browser with JavaScript and the Web Crypto API. The token, secret and keys are never uploaded, logged or stored. Even so, treat live production tokens like passwords and avoid sharing them.

Does decoding a JWT mean it is valid?

No. Anyone can decode a JWT because the header and payload are only base64url encoded, not encrypted. A token is only trustworthy after its signature is verified with the right secret or public key and its exp, nbf, iss and aud claims are checked.

How do I know when a JWT expires?

The exp claim holds the expiry time as Unix seconds. The decoder converts it to your local time and UTC, shows a live countdown, and switches to an Expired badge once the time has passed.

How do I verify an HS256 signature?

Enter the shared secret that the server uses to sign tokens. The tool computes HMAC-SHA256 over the header and payload and compares it with the signature. Tick the base64 option if your secret is stored base64 encoded.

Can it verify RS256 tokens?

Yes. Paste the issuer's public key as a PEM block that starts with BEGIN PUBLIC KEY, or as a JWK or JWKS JSON from the provider's jwks endpoint. RS, PS, ES (P-256, P-384, P-521) and EdDSA tokens are supported where your browser supports the algorithm.

Why does my token show 'NOT YET VALID'?

Its nbf (not before) claim is in the future, so servers should reject it until then. This often means the issuing server's clock is ahead of yours.

Related tools