How to use the JWT Decoder
- Paste a JWT (with or without the
Bearerprefix) into the Encoded token box, or click Load sample. - Read the decoded header and payload; the badges show the algorithm and whether the token has expired.
- Check the Claims table for human-readable
exp,iatandnbftimes in your local time zone. - Optionally verify the signature: enter the shared secret for HS256/384/512, or paste the public key (PEM or JWK) for RS, PS, ES and EdDSA tokens.
What is a JWT?
A JSON Web Token (JWT, pronounced “jot”, defined in RFC 7519) is a compact, URL-safe string used to transmit claims between parties — most often as an access token or ID token in OAuth 2.0 and OpenID Connect, sent in an Authorization: Bearer … header. It consists of three Base64URL-encoded parts separated by dots:
- Header — JSON describing the token, e.g.
{"alg":"HS256","typ":"JWT"}. - Payload — JSON with the claims: who the user is, what they may do and when the token expires.
- Signature — computed over
header.payloadwith a secret or private key, so any change to the first two parts invalidates it.
Important: the header and payload are only encoded, not encrypted. Anyone holding the token can read them — which is exactly what this decoder does. Never put secrets or sensitive personal data in a JWT payload. (Encrypted tokens exist — JWE, with five parts — but their payload can only be read with the decryption key.)
Registered claims
| Claim | Name | Meaning |
|---|---|---|
iss | Issuer | Who issued the token (e.g. your auth server URL) |
sub | Subject | The user or entity the token represents |
aud | Audience | The API(s) that should accept the token |
exp | Expiration | Unix time after which the token must be rejected |
nbf | Not before | Unix time before which the token is not valid |
iat | Issued at | Unix time when the token was created |
jti | JWT ID | Unique ID, useful to prevent replay |
Time claims are seconds since 1 January 1970 UTC — not milliseconds, a common bug when generating tokens in JavaScript with Date.now(). The decoder converts them to readable dates; for other timestamps use the Unix Timestamp Converter.
Signature algorithms
HS256/384/512 use HMAC with a shared secret: the same key signs and verifies, so every verifier can also mint tokens. RS256 (RSA), PS256 (RSA-PSS), ES256 (ECDSA P-256) and EdDSA use a private key to sign and a public key to verify — the better choice when several services must validate tokens. Identity providers publish their public keys as a JWKS at a URL like /.well-known/jwks.json; you can paste that JSON here and the key matching the token's kid is selected. Verification uses the browser's Web Crypto API.
Security checklist
- Always verify the signature on the server — decoding alone proves nothing.
- Reject
alg: noneand pin the algorithms you expect, to avoid algorithm-confusion attacks. - Check
exp,nbf,issandaud, allowing only a small clock skew. - For HS256, use a random secret of at least 256 bits — the Password Generator can create one.
Tools that pair well with the JWT Decoder
- Base64 Encode / Decode — Convert text to Base64 and back with full UTF-8 support (accents, emoji), switch to URL-safe Base64, or drop a file to get its Base64 string or data URI.
- Hash Generator — Compute MD5 and SHA hashes of any text or file instantly, create HMAC signatures, and paste an expected checksum to verify a download.
- URL Encode / Decode — Percent-encode text for safe use in URLs, decode encoded strings back to readable text, and break any URL down into its parts and query parameters.
- UUID Generator — Create cryptographically random UUIDs (v4) or sortable, timestamp-based UUIDs (v7) in bulk, then copy or download them.
Frequently asked questions
Is it safe to paste my JWT here?
Can a JWT be decoded without the secret?
How do I check if a JWT is expired?
exp claim — a Unix timestamp in seconds. This tool compares it with your device clock and shows an “Expired” or “Not expired” badge plus the exact time in your time zone.