JWT Decoder
Decode and inspect JSON Web Tokens. View header, payload claims, and check expiry - without a secret key.
β Signature is not verified - this tool only decodes. To verify the signature, use your server-side JWT library with the appropriate secret or public key.
About JWT Decoder β JWT Decoder Online
Paste any JSON Web Token into the JWT Decoder Online and see the decoded header, payload, and expiry instantly. Developers, security engineers, and QA testers use it to read the header algorithm, examine payload claims, and check whether a token has expired β all without writing a single line of code. Paste your full JWT string (the one starting with "eyJβ¦") and the decoded contents appear in under a second.
JWTs are the backbone of modern authentication and authorisation flows β used by OAuth 2.0, OpenID Connect, and virtually every REST API that issues bearer tokens. When a login fails, a session behaves unexpectedly, or an API returns a 401, the fastest first step is to decode the token and read the claims directly. This JWT decoder online does exactly that, presenting the header, payload, and signature in clearly labelled panels and surfacing standard claims like expiry and issuer in a human-readable table.
How to Use the JWT Decoder
- Copy the full JWT string from your API response, browser cookie, Authorization header, or localStorage β it looks like three Base64URL segments separated by dots.
- Paste the token into the JSON Web Token input field. The decoder triggers automatically once three dot-separated parts are detected.
- Review the Header panel (algorithm and token type) and the Payload panel (all claims as formatted JSON).
- Check the status chips: they show the algorithm, whether the token has expired (
exp), and if the not-before (nbf) constraint is active. - Use the Standard Claims table to see
exp,iat, andnbftimestamps converted to human-readable UTC dates with relative time (e.g., "expired 12 min ago").
Standard JWT Claims Explained
JWT payloads use short three-letter claim names defined by RFC 7519. Understanding each one helps you interpret tokens quickly.
- sub (Subject): The entity the token refers to β typically a user ID or account identifier. This is the most common claim and usually the primary key for looking up user data in your system.
- iss (Issuer): The server or service that created and signed the token, for example
https://auth.example.com. Your API should reject tokens from unexpected issuers. - aud (Audience): The intended recipient(s) of the token. A token issued for one service should not be accepted by another β validating this claim prevents token confusion attacks.
- exp (Expiration): A Unix timestamp after which the token is no longer valid. The decoder shows this as a UTC date and tells you if the token is already expired.
- iat (Issued At): When the token was created, as a Unix timestamp. Useful for calculating token age and diagnosing clock-skew issues between services.
- nbf (Not Before): The token must not be accepted before this timestamp. Less common but important in delayed-activation scenarios such as scheduled access grants.
- jti (JWT ID): A unique identifier for this specific token instance, used to prevent replay attacks by allowing servers to maintain a denylist of used token IDs.
Tips for Getting the Best Results
Use these tips to decode and diagnose JWT issues more efficiently.
- Copy the full token including all three parts: A JWT is always three Base64URL strings joined by dots. If you accidentally copy only the header or only the payload, the decoder will show an error. Select the entire token string from your first "eyJ" to the final character of the signature segment.
- Compare exp with the current time: The status chip tells you at a glance if a token is expired, but the Standard Claims table shows the exact UTC time. If your server is rejecting a token with "token expired", compare that timestamp against your server's system clock to detect clock-skew between services.
- Check the alg claim in the header: The algorithm chip (HS256, RS256, ES256, etc.) tells you what signing method was used. If you expected RS256 but see HS256, your token issuer may be misconfigured β a common security vulnerability called the "algorithm confusion" attack.
- Read custom claims in the payload: Beyond standard claims, most real-world JWTs include custom claims like
roles,permissions,tenantId, oremail. These appear in the full payload JSON panel even if they are not listed in the Standard Claims table. - Use the Copy buttons for downstream debugging: Copy the decoded header or payload JSON and paste it into our JSON Validator or JSON Visualizer to further inspect or compare complex nested claim structures.
Why Use a JWT Decoder Online
Decoding a JWT requires splitting the string on dots, applying Base64URL decoding to each segment, and parsing the result as JSON β simple in code, but tedious when debugging under pressure. A JWT decoder online performs all those steps instantly with no setup. Because the decoding happens in your browser with no server involved, your authentication tokens are never exposed to a third party β an important consideration when dealing with tokens that carry sensitive claims or short expiry windows.
The decoder is useful for frontend engineers debugging OAuth redirects, backend engineers verifying what their auth service is issuing, security teams auditing token structure and algorithm choices, and DevOps engineers investigating authentication failures in production logs. It is the fastest way to answer "what does this token actually say?" during an incident.
Frequently Asked Questions about JWT Decoder
+ with - and / with _, so the output can appear in a URL query string or HTTP header without percent-encoding. JWT parts are Base64URL-encoded without the usual = padding characters. The decoder converts these back to readable JSON by reversing the substitutions, padding the string to a multiple of 4 bytes, and calling atob().exp claim against your device's current system clock. If your device clock is incorrect β even by a few minutes β a token that is technically valid may appear expired here (or vice versa). Check your system time settings. Also note that server-side validation uses the server's clock, so a clock mismatch between your device and server can cause identical "expired" errors in production that are unrelated to the token itself.