JWT Decoder

This tool decodes JWTs — it does not verify signatures. A decoded token is not a validated token.

Max 100 KB · Decodes automatically as you type · Signature is displayed, never verified

Processed entirely in your browser — nothing is sent to a server.

A JSON Web Token (JWT) is a compact, URL-safe way to represent a set of claims — statements about a user or a session — as a signed string. It’s the format most APIs use for bearer tokens: after a user authenticates, the server issues a JWT that the client attaches to later requests, typically in an Authorization: Bearer <token> header.

A JWT has three dot-separated segments: header.payload.signature. The header identifies the signing algorithm (such as HS256 or RS256) and token type. The payload holds the actual claims — anything from a user ID to permission scopes to standard timing fields like exp. The signature is a cryptographic value computed over the header and payload using a secret or private key that only the issuing server holds.

The header and payload are plain JSON, but they aren’t stored as raw JSON text — each is encoded with base64url, a URL-safe variant of Base64 that swaps +// for -/_ and omits padding, so the token can travel inside a URL or header without extra escaping. Decoding a JWT is the reverse of that: split the string on its dots, base64url-decode the first two segments, and parse each as JSON.

That’s the entirety of what this tool does. It does not, and cannot, verify the signature — doing so needs the issuer’s secret or public key, which never appears inside the token itself and which this tool has no way to obtain. A token that decodes cleanly here could still be expired, forged, or rejected outright by the API it’s meant for; decoding only shows what a token claims, never whether those claims are trustworthy.

Three timing claims get dedicated treatment, since they’re what most debugging sessions come down to: exp (expiration time), iat (issued-at time), and nbf (not-before time). Each is a Unix timestamp in the payload — this tool shows the raw number next to a readable UTC date, and flags plainly, with an icon and text rather than color alone, when exp has already passed.

Examples

Frequently asked questions

Does this tool verify the JWT's signature?
No. Verifying a signature requires the issuer's secret or public key, which never appears inside the token and which this tool has no way to obtain. It only decodes the header and payload and displays the signature segment as-is — a decoded token shown here is not a validated token.
Is my token sent to a server?
No. Decoding happens entirely in your browser using JavaScript. The page's Content Security Policy restricts connect-src to a small, explicitly approved list that does not include any endpoint this tool could send a token to, so there is no code path by which a pasted JWT could leave your device.
What do exp, iat, and nbf mean?
All three are Unix timestamps (seconds since 1970-01-01 UTC) defined by RFC 7519. exp is the expiration time, after which the token should be rejected. iat is when the token was issued. nbf ("not before") is the earliest time the token is considered valid. This tool shows the raw number next to a readable UTC date for each.
What is an unsecured JWT (alg: none)?
A JWT whose header sets "alg": "none" has only two dot-separated segments — header and payload — with no signature at all. RFC 7519 permits this for cases like an already-trusted internal pipeline, but a production API that accepts an unsecured token as if it were signed has a serious vulnerability: anyone could construct one with arbitrary claims. This tool decodes it and notes the missing signature explicitly.
Why would an API reject a token that decodes cleanly here?
Decoding only reveals what a token claims — it says nothing about whether those claims are trustworthy. An API additionally checks the signature against its own key, and typically also the expiration, issuer, and audience claims. A token can be perfectly well-formed and still fail any one of those checks, which this tool never performs.