JWT Decoder

Paste any JSON Web Token to decode its header and payload. See claims, expiry time, and issuer at a glance. Signature verification requires the secret — this tool decodes only. Nothing leaves your browser.

Developer Tools

JWT Token

What This Tool Does

Decodes JWT (JSON Web Token) strings and displays the header, payload, and signature sections in readable JSON — entirely in your browser. Private keys are never sent anywhere.

Who This Is For

  • Backend developers inspecting tokens during authentication debugging sessions
  • Security engineers auditing token claims, expiry times, and signing algorithms
  • API integration developers verifying that tokens contain the expected scopes and user data
  • Learners who want to understand the structure of JWTs without writing decode code

Example: Input: A JWT string like eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ... → Output: Three decoded JSON sections: Header (algorithm and type), Payload (claims like sub, exp, iat), and Signature status

What Is a JSON Web Token (JWT)?

A JSON Web Token is a compact, URL-safe string used to securely transmit claims between two parties. It is the dominant authentication mechanism for REST APIs, single-page applications, and microservices. When you log in to a web app, the server typically returns a JWT — your browser stores it and sends it with every subsequent request to prove your identity.

A JWT has three parts separated by dots:

How to Decode and Inspect a JWT

  1. Paste your JWT into the input field — it looks like three base64url strings joined by dots.
  2. The header and payload are decoded and displayed immediately.
  3. Check the exp claim to see when the token expires (shown as a human-readable date).
  4. Check the alg field in the header — ensure it is not none, which would mean no signature verification.
  5. Look at the payload claims: sub (subject / user ID), iss (issuer), aud (audience), iat (issued at), exp (expires).

This tool decodes the token client-side only — the JWT never leaves your browser. This is important for security: never paste production tokens into online tools that make server requests.

Standard JWT Claims Reference

ClaimFull NameDescription
subSubjectThe user or entity the token refers to. Usually a user ID.
issIssuerWho issued the token. Usually a URL like https://auth.example.com.
audAudienceWho the token is intended for. Should be validated by the receiver.
expExpirationUnix timestamp. Token is invalid after this time.
iatIssued AtUnix timestamp when the token was issued.
nbfNot BeforeToken is invalid before this Unix timestamp.
jtiJWT IDUnique identifier for this token. Used to prevent replay attacks.

Any additional fields in the payload are custom claims — role, email, permissions, tenant, etc. These are application-defined.

Common JWT Debugging Scenarios

Authentication and Security Workflow

JWT decoding is part of a broader authentication debugging workflow:

Related Tools

Related Guides

Frequently Asked Questions

Is it safe to paste my JWT here?
This tool decodes JWTs entirely in your browser using JavaScript — nothing is sent to any server. However, as a best practice, never paste production access tokens or tokens containing sensitive user data into any online tool. Use test tokens or anonymized examples when debugging.
Can a JWT be tampered with?
The payload can be base64-decoded and read by anyone — JWTs are not encrypted by default. However, the signature prevents tampering: any change to the header or payload invalidates the signature, and the server will reject the modified token. For confidential payloads, use JWE (JSON Web Encryption) instead.
What does the alg: none vulnerability mean?
Some early JWT libraries accepted tokens with "alg": "none" — meaning no signature — treating them as valid. An attacker could forge any token. Modern libraries reject alg: none. Per RFC 8725, servers should specify allowed algorithms explicitly and never accept none.
How long should a JWT last?
Access tokens should expire quickly — 15 minutes is a common recommendation. Use refresh tokens (longer-lived, stored securely) to obtain new access tokens. Short expiry limits the damage if a token is stolen.
What is the difference between HS256 and RS256?
HS256 uses a shared secret — both the issuer and verifier use the same key. RS256 uses an asymmetric key pair: the issuer signs with a private key; verifiers check with the public key. RS256 is preferred in distributed systems because the public key can be shared freely without compromising security.
How do I decode a JWT in code?
In JavaScript: JSON.parse(atob(token.split(".")[1].replace(/-/g,"+").replace(/_/g,"/"))) decodes the payload. In Python: import base64, json; json.loads(base64.b64decode(payload + "==")). For production, use a JWT library like jsonwebtoken (Node) or PyJWT (Python) that also verifies the signature.