JWT decoder.

Decode a JSON Web Token and read its header, claims and expiry. Everything happens locally. The signature is shown but not verified; you would need the key for that.

Header


      

Payload


      

Timing

Signature



    

About this tool

A JWT is three Base64url segments separated by dots: a header describing the algorithm, a payload of claims, and a signature. This page decodes the first two and lays out the time-based claims (iat, nbf, exp) as readable timestamps with how long ago or how far away they are, so an expired or not-yet-valid token is obvious at a glance. A leading Bearer prefix is stripped automatically. Nothing you paste here leaves your browser.

Reading the header

FieldMeaning
algThe signing algorithm. HS256 is HMAC with a shared secret; RS256 and ES256 are RSA and ECDSA with a public key you can fetch. none should be rejected by every server.
typUsually JWT. at+jwt marks an OAuth access token.
kidKey ID: which key in the issuer's JWKS signed this token. Wrong or unknown kid is a common cause of "invalid signature" after a key rotation.

Standard claims in the payload

ClaimMeaning
issIssuer: who created the token. Verifiers should check it matches the expected identity provider.
subSubject: the user or client the token is about.
audAudience: which service the token is for. A token for one API should be rejected by another.
expExpiry, as Unix seconds. After this the token must be rejected. See how JWT expiry works.
nbfNot before: the token is not valid until this time.
iatIssued at. Useful for working out the token's lifetime (exp - iat).
jtiA unique ID, so a token can be revoked or replay detected.
scope, roles, emailApplication-specific claims. Their names and shapes vary by provider.

Common JWT problems

Decoding is not verification

Anyone can read a JWT; the payload is only Base64url-encoded, not encrypted. Never put secrets in one, and never trust the claims until the signature has been verified against the issuer's key on the server. This tool is for reading tokens while debugging, not for deciding whether to accept them.