Browser
JWT decoder
Split a token into its header and payload. The signature is shown as unchecked. The token never leaves this browser.
Browser
Split a token into its header and payload. The signature is shown as unchecked. The token never leaves this browser.
A JWT is three bits of text separated by dots. The first is a JSON header, the second is a JSON payload, and the third is a signature. Each of the first two is base64url, which is base64 with a URL-safe alphabet and often no padding. The header usually names typ and alg. The payload carries claims such as sub, iss, aud, iat, nbf, and exp. exp and nbf are times in seconds since 1970. The signature is the part that is supposed to prove the header and payload were not edited. This page does not check it.
Decoding happens in the browser. The token is not sent to tlspeek, not written to a log, and not stored. Paste a token you are allowed to see. A token can contain an email address, a user id, or other claims you would not put on a billboard. The result shows the header and the payload as JSON, and it notes a few claims. alg none means the token asserts that it has no signature. Do not accept that. An exp time in the past means the token is expired. An nbf time in the future means it is not valid yet. Neither fact proves the signature was good when the times were valid.
Look at alg first. HS256 means a shared secret. RS256 and ES256 mean a public key. The header does not include the key. You still have to check the signature with the secret or the public key on your server, and you have to check iss and aud so a token from somewhere else is not reused. This decoder stops at the JSON. It will tell you when the middle part is not JSON, when a part is missing, or when the token is too long to handle comfortably in the page.
Times are shown in UTC. If exp is in the past, the finding says the token is expired. That is a property of the claim, not a verdict on the signature. A token can be expired and forged, or fresh and forged. The signature section of a real check uses the algorithm the header names, refuses none, and refuses a key that arrived inside the token itself.
Use the decoded JSON to see what a token claims. Use your own verifier to decide whether to believe it. The password-policy page is the other tool on this site that also stays in the browser and does not make a request.
No. The page decodes the header and payload and leaves the signature unchecked. Verification needs your key and has to happen on your server.
No. Decoding runs in the browser. The token is not in a request to tlspeek.
The token says it is unsigned. Treat that as a reason to reject it, not as a decoded success.
The middle part is not base64url JSON, or the token was encrypted rather than only signed. This page expects a normal signed JWT.
The numbers are seconds since 1970, UTC. The page prints the matching UTC time.