Skip to content

JWT Inspector

Decode a JWT, read every claim with what it is for, and check the time claims against your clock — with nothing sent anywhere.

Everything on this page runs in your browser. Nothing you paste is uploaded, logged, or written into the URL — only the settings are, so a configured tool can still be linked to. A JWT is a credential for as long as it is valid. Nothing here is uploaded and nothing is put in the address bar.

Expiry
expires in 30 minutes

The HS256 signature checks out against your secret, so these claims are as trustworthy as the secret is.

Header
fieldvaluewhat it is
algHS256the signature algorithm. Your verifier must pin this, not read it from the token.
typJWTthe token type, conventionally JWT.
kid2026-07-key-1which key signed it, so the verifier can pick the right one from a key set.
Claims
claimvaluewhat it is
isshttps://auth.example.comwho issued the token. Your verifier must check this — a correctly signed token from the wrong issuer is still the wrong token.
subuser_8291who the token is about. Usually a user id, and usually the only claim you should key your own records on.
audapi.example.comwho the token is for. If your API accepts a token whose audience is someone else's API, you have built a confused-deputy.
iat1785308400when it was issued. 2026-07-29T07:00:00.000Z (60 minutes ago)
exp1785313800expiry, in seconds since the epoch. Past this instant the token must be rejected. 2026-07-29T08:30:00.000Z (in 30 minutes)
jtitok_4c19aba unique id for this token, which is what makes revocation lists and replay detection possible.
scoperead:invoices write:invoicesthe permissions granted, space-separated. Check it; do not assume a valid token means an allowed action.
email[email protected]an identity claim, and personal data. It is readable by anyone holding the token.
Segments
3
Total size
373 bytes
Algorithm
HS256
Key id (kid)
2026-07-key-1
Signature checked here
yes — valid
  • passthe HS256 signature is valid for the secret you typed
What this checked: this splits the token, decodes the header and payload from base64url with the offset of the first bad character when that fails, prints every field with what it is for, and checks the time claims against your clock with the skew you allow: expiry, not-before, issued-at, plus the shape errors that make them useless (a string where a number belongs, milliseconds where seconds belong, no exp at all). It verifies the signature only for HS256, against a secret you type. HS384 and HS512 are not verified because this page implements SHA-256 and nothing else; RS, PS, ES and EdDSA are not verified because they need the issuer's public key and nothing on this page contacts the network. In those cases the page says "not verified" — never "valid". It does not check the issuer, the audience or the revocation state against anything, because it does not know what you expect them to be.
What this assumes: that the token is a JWS with a JSON payload — a JWE is detected and refused rather than half-decoded. Time claims are seconds since the epoch per RFC 7519, and "now" is your browser's clock, which is the same clock your front end will use and not the one your API server uses. The example token is generated in this tab at load time and signed with the secret shown beside it, so it verifies for real; it is an example, not anybody's token.

Base64 is not encryption, and this is the reminder

Every claim above is readable by anybody holding the token, including the browser storing it and any proxy that logs the header. The signature stops the claims being changed; it does not stop them being read. So an email address, a role list or an internal user id in a JWT is published data as far as the client is concerned, and a secret in one is a leaked secret. If the payload needs to be private, the token needs to be an opaque reference to server-side state, or a JWE — and a JWE is what the five-segment case above detects.

Three checks a verifier has to make and often does not

Pin the algorithm rather than reading it from the header, or a token that says alg: none — or one that says HS256 when you expected RS256, signed with your own public key as the HMAC secret — will be accepted. Check the audience, or a token minted for a different service by the same issuer will pass. Check the issuer against a fixed list, and never fetch keys from a URL the token itself supplies. All three are one line each, all three are omitted in most quick-start examples, and all three have their own CVE history.

JWT Inspector · Multigrid