JWT Decoder — Decode and Verify a JWT Online
🔒 Runs in your browser — nothing is sent to a serverJWT decoder that takes any JSON Web Token and reveals its header and payload as JSON in a single click. Paste a token returned by your auth provider or copied from an `Authorization` header, and this JWT token parser splits it on the dots, base64url-decodes the first two segments and parses each as JSON. An optional Verify section checks the signature with HS256/HS384/HS512, RS256 or ES256 when you have the key, and flags tokens past their `exp`. Everything runs 100% inside your browser; your token and key never leave your device, nothing is uploaded, logged or sent to any server.
When to use a JWT decoder
A JWT decoder is the quickest way to understand what is actually inside a token when something misbehaves: checking whether `exp` has passed during a 401 investigation, confirming the `aud` a partner is issuing, verifying a custom claim survived the signing pipeline, inspecting the `kid` your identity provider attached before hitting the JWKS endpoint, or simply reading the `sub` when a token turns up in logs. Running the decode in an offline-first page keeps production tokens off remote servers — the decoded JSON is yours alone.
How decoding and verification work together
A JWT is three segments joined by dots. The header pins down the signing algorithm, the payload carries the claims, and the signature is computed over `base64url(header).base64url(payload)`. Decoding reverses the first two transforms — base64url, then JSON parse — and is always possible without any key. Verification is the second, optional step: the Verify section re-runs the exact signing primitive (`HMAC` for HS256/HS384/HS512, `RSASSA-PKCS1-v1_5` for RS256, `ECDSA` on P-256 for ES256) against the signing input using the secret or public key you provide, and reports whether the stored signature matches. Both steps happen entirely in the browser through the Web Crypto API, so nothing ever leaves the tab.
Examples
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c{
"header": {
"alg": "HS256",
"typ": "JWT"
},
"payload": {
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
},
"signature": "SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImsxIn0.eyJpc3MiOiJodHRwczovL2F1dGguZnJlZS1jb252ZXJ0ZXIub25saW5lIiwiYXVkIjoiYXBpLmt3ZXppdGdhbWVzLmNvbSIsInN1YiI6InVzZXJfNDIiLCJleHAiOjE3NTAwMDAwMDAsImlhdCI6MTc0OTk5NjQwMH0.ignored-signature{
"header": {
"alg": "RS256",
"typ": "JWT",
"kid": "k1"
},
"payload": {
"iss": "https://auth.free-converter.online",
"aud": "api.kwezitgames.com",
"sub": "user_42",
"exp": 1750000000,
"iat": 1749996400
},
"signature": "ignored-signature"
}eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbkBmcmVlLWNvbnZlcnRlci5vbmxpbmUiLCJyb2xlcyI6WyJhZG1pbiIsImF1ZGl0b3IiXSwic2NvcGUiOiJyZWFkIHdyaXRlIn0.sig{
"header": {
"alg": "HS256"
},
"payload": {
"sub": "admin@free-converter.online",
"roles": [
"admin",
"auditor"
],
"scope": "read write"
},
"signature": "sig"
}