JWT Decoder
Read a token's header, claims, and expiry
Header
{
"alg": "HS256",
"typ": "JWT"
}Payload
{
"sub": "1234567890",
"name": "Ann Example",
"role": "admin",
"iat": 1767225600,
"exp": 1924992000
}Signature
Tq1Qh7s3kz0Jm8cV4yEwXn2pR6fLbA9dGuHiK5oMtZE
Not verified. Decoding only reads the token, so anyone could have edited these claims. Your server must check the signature before trusting them.
JWT Decoder guide
A JSON Web Token (JWT) carries claims about a user or session, such as who they are and when the token expires. The claims are only base64url-encoded, not encrypted, so anyone holding the token can read them. Paste a token here to see its header, payload, and expiry.
The three parts
- Header. Says how the token was signed, for example alg HS256 or RS256, and often a key ID (kid).
- Payload. The claims: registered ones like sub, iss, aud, iat, and exp, plus any custom fields the issuer added.
- Signature. Proves the token was issued by someone holding the signing key and has not been changed. It can only be checked with that key.
Reading the time claims
iat (issued at), nbf (not before), and exp (expires) are Unix timestamps in seconds. The decoder shows them as UTC dates and tells you whether the token has expired or is not valid yet, based on your device's clock.
Decoding is not verifying
This tool reads the token without checking the signature, so a decoded token proves nothing about who issued it. Anyone can change the payload and re-encode it. Your server must verify the signature with the right key, and check exp, before trusting any claim.
Example
The payload part of a token is base64url JSON:
eyJzdWIiOiI0MiIsImV4cCI6MTkyNDk5MjAwMH0
// decodes to
{ "sub": "42", "exp": 1924992000 }