~ / developer / jwt-decoder

🔑 JWT Decoder

Paste a token and read it instantly. Expiration times are shown in your local time zone and UTC — and the token never leaves your browser.

waiting for token...
header
payload

        
claims — standard claims explained

⚠️ This tool only decodes. It does not verify the signature, so never use it to decide whether a token is genuine — verify on the server.

How to use the JWT decoder

  1. Paste a JWT into the box and it's decoded immediately. A leading Bearer (as copied from an Authorization header) is stripped automatically.
  2. Below the input, the token is color-coded into its three parts: header, payload and signature.
  3. The header and payload panels show pretty-printed JSON; use copy to grab either one.
  4. The claims table translates time claims such as exp, iat and nbf into your local time, UTC and "in 2 hours / 3 days ago," and flags the token as VALID or EXPIRED.
  5. Click sample to generate a demo token issued 10 minutes ago that expires in 50 minutes.

What is a JWT?

A JSON Web Token (JWT, pronounced "jot", defined in RFC 7519) is a compact token format used to pass login sessions and permissions between a client and an API — it's what OAuth 2.0 and OpenID Connect providers like Auth0, Okta, Firebase and AWS Cognito hand out. A JWT looks like xxxxx.yyyyy.zzzzz: three Base64URL-encoded parts separated by dots.

The header and payload are only encoded, not encrypted, so anyone can read them without a key. That's exactly what this decoder does.

Standard claims and how times are shown

ClaimMeaningShown as
iss / sub / audIssuer / subject (user) / audienceRaw value
iatIssued atLocal time + UTC + relative time
nbfNot valid before this timeNOT YET if it's in the future
expExpiration timeVALID / EXPIRED
ttlexp − iat (computed)Seconds and hours

Time claims are Unix timestamps in seconds since 1970-01-01 00:00:00 UTC. For example, "exp": 1759622400 is 2025-10-05 00:00:00 UTC — October 4, 2025, 8:00 PM in New York (EDT). If you see a year like 57,000, the issuer put milliseconds where seconds belong. Use the Unix timestamp converter for any other epoch value.

Security tips

This tool does not verify signatures. A token that decodes cleanly is not necessarily genuine, so authentication decisions must happen on the server. Encrypted tokens with five parts (JWE) can't be read without the key. Decoding happens entirely in your browser — still, clear production tokens from the box when you're done.

FAQ

How do I check when a JWT expires?
Paste the token and look at the exp row in the claims table. It shows the expiration in your local time and UTC plus how long is left. If it has already passed, you will see EXPIRED and a warning at the top.
Is it safe to paste my token here?
Decoding runs entirely in your browser and the token is never sent to a server. Even so, treat live production tokens like passwords: don't share screenshots of them and clear the box afterward.
Can I put sensitive data in the JWT payload?
No. The payload is just Base64URL-encoded JSON that anyone can read. Store only identifiers and look up sensitive data on the server, or use an encrypted JWE if you truly need confidentiality.
Does this tool verify the JWT signature?
No — it only decodes. Signature verification needs the secret (HS256) or the public key (RS256/ES256) and should happen in your backend with a maintained JWT library.
Why do I get "A JWT must have 3 parts"?
The token was truncated or extra characters got copied with it. If you copied a cookie or header value, remove surrounding quotes, semicolons or the cookie name.

Related tools