Paste a three-segment JWS (header.payload.signature). We decode the first two as JSON and show iat / nbf / exp when they are Unix seconds.
We do not verify the signature. Five-segment JWE is rejected. Treat every claim as untrusted until your API proves it.
Leading Bearer is stripped. JWS tokens use three segments (JWE uses five — not supported here).
Use it to inspect a three-segment JWS you already have: see alg, kid, iss, aud, and time claims as UTC.
Optional Bearer prefix is stripped. Nested JWT strings in claims stay strings — paste them again if you need a second pass.
Do not treat a decoded payload as authenticated. We never verify the signature. We never fetch JWKS. Five-segment JWE is rejected. Do not paste live production access tokens into a shared screen or ticket.
Split on .. Base64url-decode segments 0 and 1, JSON.parse, pretty-print. Numeric iat / nbf / exp / auth_time
become ISO timestamps. Segment 2 is shown as text plus decoded byte length. That is the whole pipeline. The token stays in this tab.
A typical header you will see:
{
"alg": "RS256",
"typ": "JWT",
"kid": "2024-11"
}
If alg is none, your server still has to reject it. This page will happily show the JSON. Verify with your IdP library, not here.
HTTP request builder (Authorization header as text) · CORS headers · About
No. Decode only. Verification needs the issuer’s keys on a trusted backend.
No. Parsing is in this tab. Clipboard managers on the machine are still your problem.
That is usually JWE. Out of scope here.
Numeric Unix seconds in UTC. Strings skip the timeline — read the raw JSON.