JWT Decoder
Decode a JWT header and payload, read exp, iat and nbf as dates, and verify HS256, RS256, PS256, ES256 or EdDSA signatures locally in your browser.
Tokens are credentials. This tool decodes and verifies them in your browser and never sends them anywhere.
Header
Payload
| Claim | Value | Date | Status |
|---|
- Algorithm (alg)
- —
- Signature (Base64url)
- —
Verify the signature
HS256/384/512: enter the shared secret. RS, PS, ES (256/384/512) and EdDSA: paste the public key as PEM (public key, RSA public key or certificate) or JWK (a JWK Set is matched by kid).
How to decode a JWT
- Paste the token into JSON Web Token. A full
Authorization: Bearer …value also works: theBearerprefix and any line breaks are removed. - The token is decoded as you type (or click Decode). The Header and Payload appear as formatted JSON, each with its own Copy button.
- Read the Time claims table:
exp,nbfandiatare shown with their raw value, the date in your time zone, a relative time (“in 3 hours”, “2 days ago”) and a status such as Expired or Not yet valid. - Check the warnings above the results, for example when
algisnoneor when a date looks like milliseconds. - To check the signature, fill in the key under Verify the signature and click Verify signature.
Decoding is not verifying
A JWT is three Base64url parts separated by dots: header.payload.signature. The header and payload are only encoded, not encrypted, so anyone who holds the token can read them, and this tool can decode any token without a key. That also means a decoded payload proves nothing: someone could have edited it. Only a valid signature shows that the token was issued by the holder of the key and has not been modified since. The status line therefore says “Decoded (signature not verified)” until you verify it.
A token with five parts is a JWE (encrypted JWT); its content cannot be read without the decryption key, and the tool tells you so.
Verifying the signature
- HS256, HS384, HS512 (HMAC): enter the shared Secret. Use Secret format to say whether it is plain text (UTF-8) or Base64/Base64url, as some providers store secrets in Base64. You can also paste a JWK of type
oct. If the secret is shorter than the hash output (32 bytes for HS256), the tool notes that it is below the RFC 7518 minimum. - RS256/384/512, PS256/384/512, ES256/384/512 and EdDSA: paste the Public key (PEM or JWK). Accepted PEM blocks are
PUBLIC KEY,RSA PUBLIC KEYandCERTIFICATE(the key is read from the X.509 certificate). A JWK or a whole JWK Set works too: the key whosekidmatches the header is used. Private keys are refused; a verifier never needs one. EdDSA supports Ed25519 in browsers whose Web Crypto implements it.
Verification uses the browser’s Web Crypto API. A result of “Invalid signature” means the key is wrong or the token was modified. Note that the algorithm is taken from the token header: a real server must instead fix the expected algorithm in its configuration, otherwise an attacker can choose it.
Security notes
- Tokens are credentials. Anyone holding a valid access token can usually act as its owner until it expires. This tool decodes and verifies everything in your browser and never sends the token or the key anywhere. Still avoid pasting production tokens in tools you cannot inspect.
alg: nonemeans the token is unsigned. Anyone can forge one, and a server must reject it. The tool shows a warning and refuses to “verify” such a token.- Clock checks here use your computer’s clock without any leeway; servers often allow a minute or two of clock skew.
- JWT dates (NumericDate) are seconds since 1 January 1970 UTC. A 13-digit value is probably in milliseconds, which is a common bug.
Frequently asked questions
Can this tool tell me whether a token is valid?
It can tell you whether the signature matches a key you provide and whether exp and nbf are satisfied right now. Whether the token is accepted also depends on checks only the server knows: expected issuer (iss), audience (aud), algorithm and revocation.
Why does verification fail with the right secret?
Check the Secret format: a Base64 secret typed as text gives a different key. Also make sure no space or line break was added to the secret, since HMAC keys are compared byte for byte.
What is the difference between RS256, PS256 and ES256?
All three are public-key signatures with SHA-256. RS256 uses RSA with PKCS#1 v1.5 padding, PS256 uses RSA with PSS padding, and ES256 uses ECDSA on the P-256 curve, which gives much shorter signatures.
Where do I find the public key of a provider?
Identity providers publish a JWKS (JSON Web Key Set), usually linked from /.well-known/openid-configuration under jwks_uri. Open it yourself and paste the JSON here; the tool picks the key by kid and never fetches anything.
Is it safe to paste my token here?
The token stays on your device: decoding and verification happen locally and nothing is uploaded. For extra caution, use an expired or test token when you only need to inspect the structure.
Related tools
- HMAC Generator Compute an HMAC-SHA1, SHA-256, SHA-384 or SHA-512 with a text, hex or Base64 key, get hex and Base64 output, and check a webhook signature in your browser.
- Base64 Encoder and Decoder Free Base64 encoder and decoder with full UTF-8 support and a URL-safe base64url option. Runs entirely in your browser, nothing is uploaded.
- Unix Timestamp Converter Convert Unix timestamps in seconds or milliseconds to readable dates in local time, UTC and ISO 8601, and turn any date back into epoch time.
- JSON Formatter and Validator Free JSON formatter and validator that beautifies, minifies and checks JSON in your browser, with syntax errors reported by line and column.