JWT Encoder
Create and sign JSON Web Tokens with HS256, RS256, ES256, PS256, or EdDSA, and generate test key pairs.
Decode, inspect, and verify JSON Web Tokens. Free, private, and 100% in your browser.
Tokens are decoded and verified locally. Nothing is sent to a server.
The decoded header, payload, and claims will appear here.
A JSON Web Token (JWT, RFC 7519) is a compact, URL-safe string used to pass claims between systems, most often as an OAuth 2.0 access token or an OpenID Connect ID token. It has three base64url-encoded parts separated by dots: a header that names the signing algorithm, a payload with the claims, and a signature that proves the token was issued by someone holding the key.
The header and payload are encoded, not encrypted, so a JWT decoder can read them without any key. Verifying the signature is what tells you whether the token can be trusted. This JWT debugger does both, entirely in your browser.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 ← header {"alg":"HS256","typ":"JWT"}
.eyJzdWIiOiIxMjM0NTY3ODkwIn0 ← payload {"sub":"1234567890"}
.SflKxwRJSMeKKF2QT4fwpMeJf36POk6y… ← signatureThe header, payload, and signature are decoded as you paste. A Bearer prefix or surrounding quotes are removed automatically.
exp, nbf, iat, and auth_time are shown as UTC and local dates with a live countdown, so you know immediately whether a token is expired.
Verify HMAC (HS256/384/512) with a secret, or RSA, RSA-PSS, ECDSA, and EdDSA with a PEM key, X.509 certificate, JWK, or JWKS.
Standard claims such as iss, sub, aud, and jti are labeled with plain-English descriptions.
Malformed tokens, invalid base64url, non-JSON headers, and encrypted JWE tokens are reported precisely.
Decoding and verification use your browser's Web Crypto API. Tokens, secrets, and keys never leave your device.
iss (issuer), sub (subject), and aud (audience) identify who issued the token, who it is about, and who should accept it. exp (expiration time), nbf (not before), and iat (issued at) are NumericDate values: seconds since January 1, 1970 UTC. jti is a unique token ID that servers can use to reject replayed tokens.
A server must always verify the signature and check exp, nbf, iss, and aud before trusting a token. Never accept tokens with "alg": "none".
Yes. This JWT decoder runs entirely in your browser: the token, secret, and public key are never sent to a server, logged, or stored. Still, treat production tokens like passwords and avoid sharing them, because anyone who has a valid token can use it until it expires.
No. The header and payload are only base64url-encoded, not encrypted, so anyone can read them. The secret or public key is only needed to verify that the signature is genuine and the token has not been changed.
Paste the token and look at the status banner above the header. It compares the exp (expiration) and nbf (not before) claims with your current time and shows how long ago the token expired or how long it remains valid.
HS256, HS384, and HS512 with a shared secret; RS256, RS384, RS512, PS256, PS384, and PS512 with an RSA public key; ES256, ES384, and ES512 with an EC public key; and EdDSA (Ed25519) in browsers that support it. Keys can be PEM (PUBLIC KEY or RSA PUBLIC KEY), an X.509 certificate, a JWK, or a JWKS. For a JWKS, the key whose kid matches the token header is used.
Check whether your secret is stored Base64-encoded. Some libraries and identity providers expect the raw bytes of a Base64 secret; enable Secret is Base64 encoded in that case. Also make sure there are no extra spaces or line breaks in the secret.
No. A JWE has five parts and its payload is encrypted, so it can only be read with the decryption key. This tool decodes signed tokens (JWS), which is the format used by almost all access tokens and ID tokens.
Create and sign JSON Web Tokens with HS256, RS256, ES256, PS256, or EdDSA, and generate test key pairs.
Generate MD5, SHA-1, SHA-256, SHA-384, and SHA-512 hashes and HMACs of text or files, live as you type.
Hash passwords with bcrypt at any cost factor and verify a password against an existing bcrypt hash.
Generate v4, v7, v1, v5, and v3 UUIDs / GUIDs in bulk, and inspect any UUID's version and timestamp.