JWT Decoder & Debugger — Decode JWT Tokens Online, Free
Need to decode a JWT right now? Paste your token in the box above and instantly view the
header, payload, and signature in a clean, readable format —
no sign-up, no server round-trips, 100 % client-side. This free JWT decoder online tool is
built for developers who need to inspect JSON Web Tokens quickly during development,
debugging, or security review.
Whether you call it a JWT debugger, a JWT viewer, or a
JSON web token decoder, this page does one thing extremely well: it splits your token
at the two dots, Base64url-decodes each part, and presents the JSON in human-readable form — all inside
your browser, identical to tools like jwt.io or the CyberChef JWT recipe.
What Is a JWT Token?
A JWT (JSON Web Token) is a compact, URL-safe string defined in
RFC 7519
that encodes a set of claims as a JSON object. It is widely used for authentication
and information exchange in REST APIs, single-page applications, microservices, and mobile apps.
A JWT looks like this:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNzE2MjM5MDIyfQ
.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
It has three Base64url-encoded parts separated by dots (.):
📋
Header
Specifies the signing algorithm (e.g. HS256,
RS256) and the token type (JWT).
The JWT header decoder reveals this metadata.
📦
Payload
Contains the claims — user ID, roles, expiry (exp),
issued-at (iat), and any custom data.
The JWT payload decoder makes this readable JSON.
✍️
Signature
A cryptographic hash of the header + payload, signed with a secret or private key.
You can decode the JWT signature section, but verifying it requires the
secret — see below.
How to Decode a JWT Token
Decoding a JWT is simply Base64url-decoding. No secret is needed. Here is how to do it across common environments:
🌐 Decode JWT Online Free
Use the tool at the top of this page — paste your token, click Decode Token, and read the header
and payload instantly. It is the fastest jwt decode online free option, works in any browser,
and nothing ever leaves your machine.
🟡 JWT Decode JavaScript
In Node.js or the browser you can decode a JWT without any library:
function decodeJwt(token) {
const [header, payload] = token.split('.');
const decode = (str) =>
JSON.parse(atob(str.replace(/-/g, '+').replace(/_/g, '/')));
return { header: decode(header), payload: decode(payload) };
}
// Or install the popular library:
import { jwtDecode } from 'jwt-decode'; // npm install jwt-decode
const decoded = jwtDecode(token);
The jwt-decode package is the most popular
jwt decode javascript solution with millions of weekly downloads on npm.
For React JWT decode, it works identically — just import and call.
For Angular JWT decoder, consider @auth0/angular-jwt
which also handles attaching tokens to HTTP requests automatically.
🐍 Python JWT Decode
# pip install PyJWT
import jwt
# Decode WITHOUT verifying signature (inspection only)
payload = jwt.decode(token, options={"verify_signature": False})
# Decode AND verify with secret
payload = jwt.decode(token, "your-secret", algorithms=["HS256"])
☕ JWT Decoder Java
// Maven: com.auth0:java-jwt
DecodedJWT jwt = JWT.decode(token);
String subject = jwt.getSubject();
Date expiry = jwt.getExpiresAt();
String role = jwt.getClaim("role").asString();
🐘 PHP JWT Decode
// composer require firebase/php-jwt
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
$decoded = JWT::decode($token, new Key($secret, 'HS256'));
🖥️ JWT Decode Bash
TOKEN="eyJhbGci..."
# Decode payload (part 2)
echo $TOKEN | cut -d. -f2 | base64 --decode 2>/dev/null | python3 -m json.tool
Handy for CI pipelines and quick terminal inspection — a common jwt decode bash one-liner
that requires no external tools beyond Python's standard library.
JWT Decode Without Verification — When and Why
JWT decode without verification means reading the payload without checking the signature.
This is perfectly valid for:
- Debugging — inspecting claims during development
- Logging user context on the client side (the browser already has the token)
- Reading the
exp claim to pre-emptively refresh a token before it expires
- Extracting the
kid (key ID) from the header to select the right public key for subsequent verification
⚠️ Important: Never trust a decoded payload without verifying the signature on your
backend. Anyone can craft a token with forged claims. Verification must happen server-side
using the shared secret or public key.
JWT Verify Signature Online & Secret Checker
Need to go beyond decoding and actually verify the JWT signature online?
Tools like jwt.io let you paste a secret or public key and confirm the signature is valid.
Our tool focuses on safe, read-only inspection — but here is how verification works under the hood:
- Take the raw header +
. + raw payload string (before Base64 decoding).
- Hash it using the algorithm in the header (e.g. HMAC-SHA256 for HS256).
- Compare the result to the third segment (the signature).
- If they match, the token is authentic and unmodified — this is the JWT secret checker step.
For asymmetric algorithms (RS256, ES256), the server signs with a private key and
anyone with the public key can verify — no secret sharing required.
Use your language's JWT library (jsonwebtoken,
PyJWT,
java-jwt) for production verification.
JWT Decoder Chrome Extension, VS Code Extension & More
Depending on your workflow, different JWT tools fit different contexts:
🔌 JWT Decoder Chrome Extension
Extensions like JWT Analyzer or JWT Debugger on the Chrome Web Store intercept
network responses and automatically decode any JWT found in Authorization headers or response bodies —
great for inspecting API traffic without copy-pasting tokens.
🖊️ JWT Decoder VS Code Extension
The JWT Decoder extension for VS Code lets you highlight a JWT string in any file and
decode it inline via the Command Palette — perfect when reviewing .env files, test fixtures, or
log snippets without leaving your editor.
🔧 CyberChef JWT
GCHQ's CyberChef has a JWT Decode recipe that can be chained with other operations —
useful in CTF challenges or security research workflows where you want to combine JWT decoding
with Base64, hex encoding, or other transforms in one pipeline.
🌐 jwt.io
The Auth0-maintained jwt.io is the industry standard JWT debugger.
It supports signature verification with secrets and public keys, and provides library links for
dozens of languages. Our tool here is a lightweight, privacy-first alternative — your token
never leaves your browser tab.
Is It Safe to Decode JWT Online?
Is it safe to decode JWT online? The short answer: it depends on the tool and
the token. Here is what to know:
✅ Generally Safe
- Decoding is just Base64 — no secret is revealed
- Client-side tools (like this one) never send your token anywhere
- Useful for development and staging tokens
⚠️ Be Careful With
- Production tokens containing PII (email, SSN)
- Online tools that send data to a server
- Tokens from live user sessions
Can you decode JWT without secret key? Yes — completely. The payload is simply
Base64url-encoded, not encrypted. The signature protects integrity (tampering), but the claims are
always readable. This is by design: JWTs are meant to be transparent to the bearer.
If you need the payload to be confidential, use JWE (JSON Web Encryption) instead.
How to Read a JWT Token — Understanding the Claims
Once decoded, the payload is a JSON object full of claims. Standard registered claims include:
| Claim |
Full Name |
Description |
sub |
Subject |
Identifies the user (e.g. user ID) |
iss |
Issuer |
Who issued the token (auth server URL) |
aud |
Audience |
Intended recipient(s) of the token |
exp |
Expiration |
Unix timestamp after which token is invalid |
iat |
Issued At |
Unix timestamp when the token was created |
nbf |
Not Before |
Token is not valid before this timestamp |
Beyond registered claims, you will often see private claims like
email,
roles,
permissions, or
tenant_id
added by the application. Our JWT viewer above displays all of them in formatted JSON.
Why Is My JWT Not Decoding? — Troubleshooting
Common reasons a JWT fails to decode and how to fix them:
❌ Invalid format — not three segments
Make sure you copied the full token including both dots. Some systems wrap tokens in quotes or
add a Bearer prefix — strip those first.
❌ Padding errors in Base64
JWT uses Base64url encoding (replacing + with - and /
with _, no padding). Standard atob() can choke — make sure your decoder
handles this variant.
❌ Token is actually a JWE (encrypted)
Encrypted JWEs have five segments. The payload is ciphertext, not readable JSON.
You need the private key to decrypt it first.
❌ Expired token (exp in the past)
The token itself still decodes — but your backend library may reject it during verification.
Our tool flags expired tokens by comparing exp to the current timestamp.
❌ Whitespace or newline characters
If copied from a terminal or email, the token may have line breaks. Paste into a text editor
and join it into a single line before decoding.
Frequently Asked Questions
Can you decode a JWT without the secret key? ▾
Yes. The header and payload are Base64url-encoded, not encrypted. Any tool — including this one —
can decode them without any key. The secret is only required to verify the signature
and confirm the token has not been tampered with.
Is it safe to use an online JWT decoder? ▾
Yes — if the tool processes tokens locally. This tool does all decoding in your
browser using JavaScript; no data is sent to a server. For production tokens with sensitive user
data (PII, financial info), prefer a local tool, a CLI command, or a browser extension over any
online service, just to be safe.
How do I verify a JWT signature online? ▾
Tools like jwt.io let you paste your HMAC secret or RSA public key and verify the
signature in-browser. For production, always verify server-side using your language's JWT
library so the secret never leaves your infrastructure.
What is the difference between JWT decode and JWT verify? ▾
Decoding reads the header and payload — no key needed, anyone can do it.
Verifying cryptographically confirms the signature matches the content using
the secret or public key. Always verify on the backend before trusting any claim.
Why does my JWT token have "none" as the algorithm? ▾
A JWT with "alg": "none" has no signature.
This is a known security vulnerability — some older libraries accepted such tokens as
valid. Modern libraries reject them by default. If you see this in your decoded header, treat it
as a red flag.
How do I read a JWT token's expiry? ▾
The exp claim is a Unix timestamp (seconds since Jan 1 1970).
Paste your token above and the tool will decode it and display the human-readable expiry date automatically.
In JavaScript: new Date(payload.exp * 1000).toISOString().