Skip to content
ForgePlug — Logo
Developer100% Browser-BasedNo Signup

JWT Decoder

A premium JWT Decoder that works entirely in your browser. Paste any JWT token to instantly decode its header, payload, and signature. View standard claims like issuer, subject, audience, and expiration with a live countdown timer. Supports all JWT algorithms and custom claims. Features beautifully formatted JSON panels, copy and export options, and example tokens — all without sending your token to any server. No cryptographic verification is performed; this is a decoder, not a signature verifier.

Your Token is Safe

JWT Decoder works entirely in your browser. Your token is never uploadedto any server. All decoding happens locally using JavaScript's built-in Base64 decoder.

Paste a JWT token to decode

Paste → Decode → Inspect

Keyboard Shortcuts

Decode JWTCtrl+Enter
ClearCtrl+L

Example Tokens

Pre-built JWT examples to explore. Each example demonstrates different JWT features.

HS256 Token

Standard JWT signed with HMAC-SHA256

HS256

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxM...

RS256 Token

JWT signed with RSA-SHA256, showing public key claims

RS256

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImtleS...

Expired Token

JWT that has already expired — demonstrates expiry detection

HS256

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJle...

Expiring Soon

JWT expiring within hours — demonstrates expiring-soon detection

HS512

eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJzZ...

Custom Claims

JWT with custom namespaced claims and permissions

ES256

eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImVjLW...

No Expiration

JWT without an exp claim — demonstrates unknown expiration

HS256

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJub...

Important: This is a Decoder, Not a Verifier

This tool only decodes the Base64-encoded segments of a JWT. It does not verify the cryptographic signature. Anyone can decode a JWT — the security comes from signature verification, which requires the secret key or public key. Never trust a JWT based solely on its decoded content.

Frequently Asked Questions

What is a JWT?
A JSON Web Token (JWT) is a compact, URL-safe token format used for transmitting claims between two parties. It consists of three Base64-encoded segments separated by dots: a header (containing the algorithm and token type), a payload (containing the claims), and a signature (used to verify the token's integrity). JWTs are commonly used for authentication and authorization in web applications and APIs.
How do JWTs work?
When a user logs in, the server creates a JWT containing user claims and signs it with a secret key (HMAC) or a private key (RSA/ECDSA). The client stores this token and sends it in the Authorization header with each request. The server can then verify the signature and extract the user's identity from the payload without needing a database lookup. This makes JWTs ideal for stateless authentication in REST APIs and distributed systems.
Is decoding a JWT secure?
Yes, decoding a JWT is completely safe. A JWT's header and payload are only Base64-encoded, not encrypted — anyone possessing the token can read them. The security of a JWT comes from the signature, which requires the secret key to verify. Our tool only decodes the header and payload so you can inspect their contents. We do NOT verify signatures, which means we cannot validate if a token has been tampered with.
Can ForgePlug verify JWT signatures?
No. ForgePlug's JWT Decoder is a decoding and inspection tool only — it does NOT verify signatures. Signature verification requires access to the signing secret (for HMAC algorithms) or the public key (for RSA/ECDSA algorithms), which we do not ask for. To verify a JWT's authenticity, you need to check the signature on your server or use a dedicated JWT library. Think of this tool as a way to inspect what's inside a token, not to prove it's legitimate.
Is my JWT token uploaded to a server?
Absolutely not. Everything happens entirely in your browser. The JWT is decoded using JavaScript's built-in atob() function combined with the TextDecoder API. Your token never leaves your device — no network requests, no uploads, no server processing. The security notice at the top of the page reinforces this commitment. This is a core privacy feature of all ForgePlug tools.
What information can I see in a JWT?
Our decoder extracts and displays the following: the header (algorithm, token type, key ID), the payload (all standard claims like issuer 'iss', subject 'sub', audience 'aud', expiration 'exp', issued-at 'iat', and any custom claims), and the raw signature. We also show the expiration status with a countdown timer, the token's structure breakdown, and a beautified JSON view of both the header and payload segments.
What does the expiration status mean?
We show three statuses: 'Valid' (green) — the token is not expired and has more than 7 days remaining; 'Expiring Soon' (amber) — the token expires within 7 days; 'Expired' (red) — the token has already passed its expiration time. For tokens without an exp claim, we show 'No Expiration' (gray). The countdown timer updates in real-time so you can see exactly how much time is left.

JSON Web Tokens: Anatomy, Security, and Common Pitfalls

How JWT authentication works under the hood, and what every developer should know before implementing it.

JSON Web Tokens (JWTs) have become the dominant standard for stateless authentication in modern web applications. They appear in OAuth 2.0 flows, single sign-on systems, API authorization headers, and session management. Yet despite their ubiquity, JWTs are frequently misunderstood, leading to security vulnerabilities, performance issues, and implementation mistakes that can compromise an entire application.

The Three Segments of a JWT

A JWT consists of three Base64URL-encoded segments separated by dots: header.payload.signature. Each segment serves a distinct purpose.

The header specifies the signing algorithm (like HS256, RS256, or ES256) and the token type. This is metadata about how the token was created, not the content itself. The header is not secret — anyone who possesses the token can read it.

The payload contains the claims — structured data about the subject (user), issuer, audience, expiration time, and any custom data your application needs. Standard claims include sub (subject/user ID), iss (issuer), aud (audience), exp (expiration timestamp), and iat (issued-at timestamp). Like the header, the payload is not encrypted — it is simply encoded.

The signature is the security mechanism. It is created by taking the encoded header and payload, and hashing them with a secret key (for HMAC algorithms like HS256) or signing them with a private key (for asymmetric algorithms like RS256). The signature allows anyone with the corresponding verification key (shared secret for HMAC, public key for RSA) to verify that the token was created by the expected issuer and has not been modified.

Security Properties and Limitations

JWTs provide three security properties when implemented correctly. Integrity: the signature ensures the token has not been tampered with. Authenticity: only someone with the signing key could have created a valid signature. Non-repudiation: the issuer cannot deny having issued the token (for asymmetric algorithms).

However, JWTs have important limitations. They are not encrypted — the payload is readable by anyone who possesses the token. Never put sensitive data (passwords, social security numbers, credit card numbers) in a JWT payload unless you are using JWE (JSON Web Encryption), which is a separate specification.

JWTs also cannot be revoked before their expiration time without additional infrastructure. Once issued, a valid JWT will remain valid until exp is reached. This is why short expiration times (5–15 minutes for access tokens) and refresh token rotation are essential for security.

Common Implementation Mistakes

Accepting the algorithm from the header is the most dangerous JWT vulnerability. If your server reads the algorithm from the token's header instead of expecting a fixed algorithm, an attacker can change the algorithm to "none" (which some libraries accept) or switch from RS256 (asymmetric) to HS256 (symmetric) and use the public key as the HMAC secret. Always specify and validate the expected algorithm on the server side.

Long expiration times reduce security. Access tokens should expire within 5–15 minutes. If a token is stolen, a short expiration limits the window of misuse. Use refresh tokens with rotation to obtain new access tokens without requiring the user to re-authenticate.

Missing issuer and audience validation allows token confusion attacks. Always verify that the iss claim matches your expected issuer and the aud claim matches your API. Without these checks, a token issued for one service could be accepted by another.

When to Use JWTs vs. Sessions

JWTs excel in stateless architectures where the server does not store session state — microservices, serverless functions, and distributed systems. They are also ideal for cross-domain authentication (SSO) because the token is self-contained and does not require a shared session store.

Server-side sessions are simpler for traditional web applications where all requests go to the same server. They allow instant revocation, do not require a token format specification, and avoid the complexity of token refresh flows. For most standard web applications, server-side sessions remain a perfectly valid choice.

Using This Decoder

Paste any JWT token to decode its header and payload. The decoder shows the expiration status with a live countdown, highlights standard claims, and provides beautified JSON output. This tool decodes only — it does not verify signatures. For signature verification, you need the signing secret or public key, which should be verified on your server.

Frequently Asked Questions

Everything you need to know about decoding JWT tokens

What is a JWT?
A JSON Web Token (JWT) is a compact, URL-safe token format used for transmitting claims between two parties. It consists of three Base64-encoded segments separated by dots: a header (containing the algorithm and token type), a payload (containing the claims), and a signature (used to verify the token's integrity). JWTs are commonly used for authentication and authorization in web applications and APIs.
How do JWTs work?
When a user logs in, the server creates a JWT containing user claims and signs it with a secret key (HMAC) or a private key (RSA/ECDSA). The client stores this token and sends it in the Authorization header with each request. The server can then verify the signature and extract the user's identity from the payload without needing a database lookup. This makes JWTs ideal for stateless authentication in REST APIs and distributed systems.
Is decoding a JWT secure?
Yes, decoding a JWT is completely safe. A JWT's header and payload are only Base64-encoded, not encrypted — anyone possessing the token can read them. The security of a JWT comes from the signature, which requires the secret key to verify. Our tool only decodes the header and payload so you can inspect their contents. We do NOT verify signatures, which means we cannot validate if a token has been tampered with.
Can ForgePlug verify JWT signatures?
No. ForgePlug's JWT Decoder is a decoding and inspection tool only — it does NOT verify signatures. Signature verification requires access to the signing secret (for HMAC algorithms) or the public key (for RSA/ECDSA algorithms), which we do not ask for. To verify a JWT's authenticity, you need to check the signature on your server or use a dedicated JWT library. Think of this tool as a way to inspect what's inside a token, not to prove it's legitimate.
Is my JWT token uploaded to a server?
Absolutely not. Everything happens entirely in your browser. The JWT is decoded using JavaScript's built-in atob() function combined with the TextDecoder API. Your token never leaves your device — no network requests, no uploads, no server processing. The security notice at the top of the page reinforces this commitment. This is a core privacy feature of all ForgePlug tools.
What information can I see in a JWT?
Our decoder extracts and displays the following: the header (algorithm, token type, key ID), the payload (all standard claims like issuer 'iss', subject 'sub', audience 'aud', expiration 'exp', issued-at 'iat', and any custom claims), and the raw signature. We also show the expiration status with a countdown timer, the token's structure breakdown, and a beautified JSON view of both the header and payload segments.
What does the expiration status mean?
We show three statuses: 'Valid' (green) — the token is not expired and has more than 7 days remaining; 'Expiring Soon' (amber) — the token expires within 7 days; 'Expired' (red) — the token has already passed its expiration time. For tokens without an exp claim, we show 'No Expiration' (gray). The countdown timer updates in real-time so you can see exactly how much time is left.

Guides & Articles

Learn how to get the most out of this tool with our in-depth guides.

Tool Overview

A closer look at JWT Decoder — how it works, who it's for, and where it fits in your workflow.

A JSON Web Token (JWT) is a compact, URL-safe way to transmit claims between two parties — almost always used for authentication and authorization. Every JWT is built from three dot-separated segments: a header describing the signing algorithm, a payload containing claims such as the user's ID and expiry time, and a signature that cryptographically proves the token hasn't been tampered with. The JWT Decoder splits those segments apart and renders each one as readable JSON so you can see exactly what a token contains.

This tool is essential for developers debugging authentication flows, integrating third-party APIs that return tokens, or building single sign-on systems. Instead of manually base64-decoding each segment, paste the token once and inspect the issuer, subject, audience, expiration, and any custom claims your application adds. The live expiration countdown tells you at a glance whether a token is still valid — no more mentally converting Unix timestamps.

Because tokens can contain sensitive identity data, processing them on a public server would be a security risk. ForgePlug decodes everything locally in your browser: the token, its claims, and any secrets you inspect never leave your device. There is no API endpoint, no logging, and no account required — paste, inspect, and move on.

Key Features

Everything you get with this tool, at a glance.

Zero-Upload Decoding

Tokens are decoded locally in your browser and never sent to any server.

Live Expiration Countdown

See seconds remaining until a token expires, with an expired-state warning.

Standard & Custom Claims

Inspect iss, sub, aud, exp, nbf, iat, jti plus any application-specific claims.

Signature & Algorithm View

Review the alg header and signature segment to verify the token structure.

Copy-Ready Output

Copy the decoded header or payload in one click for use in scripts and docs.

Fully Client-Side

Works offline after load — your tokens stay on your machine, period.

How to Use JWT Decoder

Get from zero to done in four quick steps — no account, no learning curve.

  1. Paste your token

    Copy the full JWT — all three segments including dots — and paste it into the input area. The decoder parses it instantly as you type.

  2. Review the header

    Check the algorithm (alg) and token type (typ) fields that describe how the token was signed.

  3. Inspect the payload claims

    Read the decoded claims as formatted JSON. Verify exp, iat, and any custom fields your app relies on.

  4. Check expiration & signature

    Use the live countdown to confirm validity, then inspect the signature segment to understand the token's integrity protections.

Practical Examples

Real input and output pairs so you know exactly what to expect.

Decode a real JWT

Input

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Output

header: {"alg":"HS256","typ":"JWT"}  •  payload: {"sub":"1234567890","name":"John Doe","iat":1516239022}

Spot an expired token

Input

eyJhbGciOiJub25lIn0.eyJleHAiOjE2MDAwMDAwMDB9.

Output

Expired: this token expired over 5 years ago (Sep 2020).

Reject a malformed token

Error case

Input

not-a-jwt

Output

The tool flags this input as invalid — no output is produced until the issue is fixed.

Guides & Articles

Learn how to get the most out of this tool with our in-depth guides.

Part of Developer Essentials

Was this tool helpful?

Your feedback helps us improve JWT Decoder for everyone.

Share this tool

Share
Runs in your browser100% privateNo data uploaded