JWT Decoder and Verifier
Free JWT decoder and debugger: decode a token online without a secret, edit the claims and re-sign, verify HS, RS, ES and EdDSA with a JWKS, and check expiry.
How to use JWT Decoder
- 1Paste your JWT (a leading Bearer or quotes are cleaned up for you) or pick a sample from Load an example.
- 2Read the header, payload, dates, claim checks and warnings, then enter the secret, public key or JWKS to verify the signature.
- 3Edit the header or payload, adjust exp with the time buttons and sign with your secret or private key to build a test token, then copy it.
What makes it better
- Token, header and payload stay in sync: edit any of them and the others update, re-signed when a key is available
- Live expiry countdown, UTC or local dates and per-claim checks for exp, nbf, iss and aud with clock skew
- Verifies HS256/384/512, RS, PS, ES and EdDSA with a PEM key, certificate, JWK or JWKS picked by kid
- Refuses keys that do not match the algorithm and never reports alg none as verified
- Detects encrypted JWE tokens and flags jku, x5u, embedded jwk and suspicious kid headers
About JWT Decoder
JWT Decoder splits a JSON Web Token into header, payload and signature, shows each as readable JSON and turns exp, nbf and iat into dates with a live countdown. Edit the token or its JSON and the other side updates at once, re-signed with your secret or private key. Verify the signature with a secret, PEM key, certificate, JWK or a whole JWKS, and see warnings for risky headers such as the none algorithm, jku or an embedded key. Everything runs on your device and nothing is sent anywhere.
Common uses
- Find out why an API returns 401: check whether the access token has expired, is not valid yet or has the wrong audience.
- Confirm which scopes, audience and issuer an OAuth or OpenID Connect token really carries.
- Verify a token against the key a provider publishes in its JWKS during an integration.
- Change a claim, extend exp and re-sign with a test key to try an endpoint without writing code.
Example
Input
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjQxMDI0NDQ4MDB9.YwjL2wBB9GurNrAmlfXwVdzMQJOOvbFk4rjmHb7H8kc
Result
{
"alg": "HS256",
"typ": "JWT"
}
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022,
"exp": 4102444800
}Good to know
- A JWT is signed, not encrypted: anyone who holds the token can read the payload. Do not put secrets in claims, and never paste production tokens into a site you do not trust. This page decodes on your device and sends nothing.
- A valid signature only proves the token was not changed and who holds the key. Your server must still check the issuer, audience, expiry and the algorithm it expects.
- Five-part encrypted tokens (JWE) are detected and described, but not decrypted here. Private keys you paste stay in this tab; use throw-away keys for testing and never a production signing key.
JWT Decoder FAQ
How do I decode a JWT online without a secret?
The header and payload are only Base64URL-encoded JSON, so they can be read without any key. Paste the token and both parts appear at once. The secret or public key is needed only to check that the signature is genuine.
What does the JWT error “invalid signature” mean?
It means the signature does not match the header and payload under the key you entered. Common causes are the wrong secret, a secret that is Base64-encoded when you typed it as text, a key from a different environment, or a token that was edited after signing.
What are exp, nbf and iat in a token?
They are times in seconds since 1 January 1970 UTC. exp is when the token stops being valid, nbf is when it starts, and iat is when it was issued. The page converts each to a date and compares it with your clock.
Why is the algorithm “none” dangerous?
A token with alg none has no signature, so anyone can write one with any claims. Servers that accept it can be tricked into treating a forged token as real. This page never reports such a token as verified.
Why can't I verify an HS256 token with a public key?
HS256 uses one shared secret for signing and checking. Accepting a public key for it would let an attacker sign tokens with that public key, which is called algorithm confusion. The page therefore requires a secret for HS algorithms and a key of the matching type for the others.
Is a JWT encrypted?
Normally not. A standard signed JWT (a JWS) only protects against changes, so its payload is readable by anyone who holds it. An encrypted token is a different thing called a JWE, which has five parts instead of three. This page recognises a JWE and describes its header but cannot read its payload.
What is the difference between decoding and verifying a JWT?
Decoding just reverses the Base64URL text to show the claims, and anyone can do it. Verifying recomputes the signature with the right key and proves the token came from the key holder unchanged. A decoded token you have not verified should never be trusted for access decisions.
Why does my RS256 token say it cannot be verified?
RS256 is checked with the issuer's public key, not a secret, so the page needs that key first. Paste the PEM, certificate, JWK or the provider's whole JWKS; with a JWKS the key is chosen by the token's kid. A key of another type, such as an EC key, is refused on purpose.
What is a JWKS?
A JWKS (JSON Web Key Set) is a JSON document with a list of public keys under the name keys. Identity providers publish one so clients can verify tokens, and each key carries a kid that matches the kid in the token header. Pasting the whole set here works; no download is made for you.