Web & Network

JWT Decoder

Decode JSON Web Tokens to inspect header, payload, and claims. No signature verification.

How to use this tool

  1. Paste a JWT into the JWT Token box. It expects the standard three-part header.payload.signature format.
  2. The Token Structure panel appears instantly, showing the header, payload, and signature as color-coded segments.
  3. Read the Header panel for pretty-printed JSON — the signing algorithm (alg) and token type (typ).
  4. Read the Payload panel for the full JSON body of the token.
  5. Scan the Claims grid for decoded standard claims like iss, sub, aud, exp, and iat — timestamps are shown in UTC.
  6. If the token has expired, a red warning appears under the claims grid showing the exact expiry time.

Why this tool is helpful

Debug authentication

See exactly what's inside an access or ID token — header, claims, and scopes — without writing any code.

Check expiry at a glance

exp, iat, and nbf are converted to UTC, and an expired token triggers a clear warning.

Inspect OAuth & OIDC claims

iss, sub, aud, scope, and azp reveal who issued the token, for whom, and what it allows.

Learn JWT structure

See how a token splits into three Base64URL segments — header, payload, and signature — and what each holds.

Read custom claims

Any claim beyond the standard set still appears in the grid, so nothing in the payload is hidden.

Stay private

Everything runs in your browser. Nothing is uploaded, logged, or sent to a server — safe for sensitive tokens.

FAQ

What does this tool actually do?

It Base64URL-decodes the header and payload segments of a JWT and pretty-prints them as JSON, then surfaces the standard claims in a grid. It does not verify the signature.

Does it verify the signature?

No. It only decodes. A JWT is trustworthy only if its signature is verified against the correct secret or public key, so never use an unverified token for authentication.

How is Base64URL different from regular Base64?

JWT uses a URL-safe alphabet where - and _ replace + and /, and the = padding is omitted. This tool translates those characters and re-pads automatically.

Why does nothing appear when I paste a token?

A valid input must have exactly three dot-separated parts (header.payload.signature) and the first two must decode to valid JSON. Missing segments or malformed JSON simply shows no output.

Why does my token show as expired?

The exp claim is a Unix timestamp in seconds. If it is in the past, the tool warns you and shows the exact expiry time in UTC.

What are exp, iat, and nbf?

They are standard time-based claims stored as seconds since the Unix epoch: expiration, issued-at, and not-before. The tool converts each to UTC for readability.

Does my token leave my browser?

Never. All decoding happens client-side in JavaScript. Your token is not uploaded, stored on, or logged by any server.