Anyone can decode a JWT, but only the right key can produce a valid signature. Your backend must always verify the signature and reject alg: none before trusting any claim. This tool refuses unsigned tokens when you ask it to verify them.
Frequently asked questions
›Is it safe to paste a real JWT here?
Yes. Decoding and signature verification happen in your browser with the Web Crypto API. The token is never sent to a server, never saved in localStorage and never put in the URL.
›Can anyone read the contents of a JWT?
Yes. A standard signed JWT (JWS) is only Base64URL-encoded, not encrypted. Anyone holding it can read the header and payload, so never put passwords or secrets inside a token.
›Why does the decoder say the token is expired?
Because the exp claim, a Unix timestamp in seconds, is earlier than your device's current time. The decoder shows exp, iat and nbf as readable dates in your language so you can see exactly when it expired.
›Which signature algorithms can it verify?
HMAC (HS256, HS384, HS512) with a shared secret, and RSA, RSA-PSS and ECDSA (RS*, PS*, ES*) or EdDSA with a public key in PEM format, an X.509 certificate or a JWK.