JWT decoder
Header, claims and expiry as readable dates. Decoded in this tab — and decoding is not verification.
Why that distinction matters
It would be easy to put a green tick next to a token that decodes cleanly. It would also be actively harmful: a developer who reads that as "valid" may skip signature verification on the server, and a JWT whose signature is not checked is simply a claim the client made about itself. Anyone can mint one asserting any role they like.
Several decoders blur this line. The rule is simple — decoding happens anywhere, verification happens on your server with the key, on every request, every time.
Reading the claims
The header names the signing algorithm. alg: none means unsigned, and historically some libraries accepted such tokens as trusted — if you see it where a signature is expected, treat it as a security finding.
In the payload, exp, iat and nbf are Unix timestamps in seconds. They are rendered here as local dates with the time remaining, because expiry bugs are usually caused by someone comparing ten-digit numbers by eye, or by seconds being confused with the milliseconds JavaScript uses everywhere else.