UtilToolkits2025-12-21
TL;DR — Paste any JWT into the JWT Debugger to instantly see the decoded header, payload, expiration time, and scopes. Everything runs in your browser — your production tokens never reach a server. For raw Base64 work, see the Base64 Converter; for nested JSON inside claims, the JSON Formatter.
You ship a feature, QA passes, prod looks fine — then random users report being logged out, or worse, seeing the wrong role. The token looks right but something inside it isn’t. Without a fast way to inspect what’s actually in the JWT, you’re stuck reading server logs or attaching a debugger.
A JWT is just three Base64Url-encoded pieces glued with dots: header.payload.signature. The first two are plain JSON — readable in milliseconds if you have the right tool.
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyXzEyMyIsImV4cCI6MTcxNzE1NjgwMH0.signature
└────── header ─────┘ └─────────────── payload ─────────────────┘ └─sig─┘
alg) and token type (typ). Watch for alg: "none", a classic vulnerability.iss (issuer), sub (subject/user ID), aud (audience), exp (expiry), iat (issued at), scope/roles.exp — the #1 cause of "random" logouts. Convert the Unix timestamp; if it’s in the past, the token is expired.iss — issued by the right authority? Mismatched issuers between dev/staging/prod cause silent rejections.aud — intended for your service? A token minted for the mobile app won’t work on the admin API.scope / roles — does the user actually have admin, or did the role get stripped during refresh?sub — the right user ID? You’d be surprised how often a shared dev account masks the bug.Authorization header.exp/iat auto-convert from Unix time to human-readable dates.The other big "free jwt debugger" sites send your token to their server for decoding. A leaked production access token grants whatever the user can do — read PII, charge cards, call internal APIs. The UtilToolkits JWT Debugger decodes locally with JavaScript. No network round-trip, no logging, no risk. Verify in DevTools Network tab.
No — a standard JWS-format JWT is signed but not encrypted. Anyone with the token can read the claims. For encryption use JWE.
Decode it and compare the exp claim (Unix seconds) to the current time. The JWT Debugger does this for you and shows the time-to-live in human terms.
Yes for HMAC if you have the secret, and for RSA/ECDSA if you have the public key. The debugger supports verification when you paste the key.
OAuth is a delegation protocol; JWT is a token format. OAuth often uses JWT as the access-token format, but they solve different problems.