ToolNest

JWT Decoder

Free JWT decoder. Read the header and payload of any JSON Web Token, see expiry in plain language, and verify HS256 signatures — all in your browser.

Decoding happens in this tab. The token is never sent anywhere — which matters, because a JWT is a live credential.

Header

{
  "alg": "HS256",
  "typ": "JWT"
}

Payload

{
  "sub": "1234567890",
  "name": "Ada Lovelace",
  "iat": 1755120000,
  "exp": 1912886400,
  "role": "admin"
}

Validity

Within time window — signature not implied

Expires at (exp)
8/14/2030, 2:50:00 AM (in 1396d)
Issued at (iat)
8/14/2025, 2:50:00 AM (430d ago)

Claims explained

sub
1234567890Subject — who the token is about
name
Ada Lovelace
iat
1755120000Issued-at time
exp
1912886400Expiry time
role
adminRole claim (application-specific)

Signature

qGH8vYbHXG0J7L4nJ8kZoqvV6uQXcYh0Xy1kZ3n5cQw

Decoding is not verifying. Anyone can read a JWT's payload — it is only Base64, not encryption. Never put a password, a card number or anything private in one, and never trust its claims on the server without checking the signature.

A JSON Web Token is a login session, an API key or a password-reset link compressed into a single string. When something is failing — an endpoint returns 401, a user is logged out too early, a permission is missing — the first question is always the same: what is actually inside this token?

This decoder shows the header and payload as readable JSON, translates the timestamps into plain language, explains the standard claims, and can verify HS256, HS384 and HS512 signatures if you supply the secret. Everything happens in your browser, which matters more here than for almost any other tool: a JWT is a live credential.

How to use the JWT Decoder

  1. Paste the token

    With or without a leading "Bearer" — it is stripped automatically.

  2. Read the header

    It tells you the signing algorithm and, often, which key was used.

  3. Read the payload

    Every claim is shown, with the standard ones explained and the times converted to your local clock.

  4. Check validity

    Expired, not-yet-valid or currently valid is shown at a glance, with the exact times.

  5. Verify the signature (optional)

    For HMAC tokens, paste the shared secret to confirm the token is genuine.

The three parts

A JWT is three Base64url segments joined by dots. The header says how it was signed. The payload carries the claims — who the token is about, what it permits, when it expires. The signature is a cryptographic check over the first two, which proves they have not been altered.

The critical point, and the one most often missed: the first two parts are *encoded*, not encrypted. Anyone holding the token can read them, exactly as this page just did. A JWT hides nothing.

Never put anything private in a payload

Because the payload is readable by anyone who has the token — including the user it was issued to, and anyone who obtains it from a log file, a browser extension or a shared device — it must never contain a password, a card number, a national identity number, a private key, or anything else you would not print on the outside of an envelope.

What belongs in a payload is an identifier and a set of permissions, both of which the server can check against its own records. If the data genuinely must travel encrypted, that is JWE, a different specification.

The standard claims

ClaimMeaningNotes
issIssuerWho created the token — always check it matches who you expect
subSubjectWho the token is about, usually a user ID
audAudienceWhich service the token is for; reject tokens issued for someone else
expExpiryUnix seconds. A token without one never expires — almost always a bug
nbfNot beforeThe token is invalid until this time
iatIssued atWhen it was created; useful for detecting an unexpectedly old session
jtiToken IDA unique identifier, used to revoke or to prevent replay

All JWT times are Unix seconds, not milliseconds. Passing them straight to JavaScript’s Date constructor gives a date in 1970 — multiply by 1000 first.

Decoding is not verifying

Reading a token proves nothing. Anyone can craft a JWT with "role": "admin" in the payload and hand it to your server. What separates a genuine token from a forged one is the signature, and only the server holding the key can check it.

There is a notorious attack that follows from this: a token whose header says "alg": "none", submitted to a library that trusts the header rather than the algorithm the application expects. Always pin the expected algorithm server-side and reject anything else.

HMAC versus public-key signing

HS256, HS384 and HS512 use one shared secret for both signing and verifying. That is simple, and it is why this page can verify such a token when you supply the secret — but it also means every service that needs to verify must hold the secret, and therefore could also mint tokens.

RS256, ES256 and their relatives use a private key to sign and a public key to verify. That lets many services check tokens without any of them being able to issue one, which is why every serious identity provider uses them. Verifying such a token requires the issuer's public key, so it cannot be done here.

Frequently asked questions

Is it safe to paste a JWT into this page?

The decoding happens entirely in your browser and nothing is transmitted. That said, treat any token as a live credential: prefer an expired or test token, and rotate anything you have pasted into a tool you do not control.

Can I decode a JWT without the secret?

Yes — the header and payload are Base64url-encoded, not encrypted, so they are readable by anyone. The secret is only needed to verify the signature.

Why does my token show as expired?

The exp claim is a Unix timestamp in seconds and is compared against your device clock. Check that your system time is correct before assuming the token is at fault.

Can this verify an RS256 token?

No. RS256 and ES256 need the issuer’s public key. Only HMAC algorithms — HS256, HS384 and HS512 — can be verified with a shared secret, and those are supported here.

Is a JWT encrypted?

No. It is signed, which prevents tampering but not reading. Never place a password, a card number or any other secret inside the payload.

What does "alg": "none" mean?

An unsigned token. It exists in the specification but is a well-known attack vector — a server must always require the algorithm it expects rather than trusting the one in the header.

100% private. Files are processed on your device and never uploaded.

Instant results. No upload queue. Processing time depends on your device.

Free forever. No signup, no watermark, no paid tier.

Works everywhere. Use a modern browser on your phone or computer.

Related tools

JWT Decoder is one of all the free tools on ToolNest. No account or subscription needed — anywhere in the world.