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
Keyboard Shortcuts
Example Tokens
Pre-built JWT examples to explore. Each example demonstrates different JWT features.
HS256 Token
Standard JWT signed with HMAC-SHA256
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxM...
RS256 Token
JWT signed with RSA-SHA256, showing public key claims
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImtleS...
Expired Token
JWT that has already expired — demonstrates expiry detection
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJle...
Expiring Soon
JWT expiring within hours — demonstrates expiring-soon detection
eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJzZ...
Custom Claims
JWT with custom namespaced claims and permissions
eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImVjLW...
No Expiration
JWT without an exp claim — demonstrates unknown expiration
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?
How do JWTs work?
Is decoding a JWT secure?
Can ForgePlug verify JWT signatures?
Is my JWT token uploaded to a server?
What information can I see in a JWT?
What does the expiration status mean?
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?
How do JWTs work?
Is decoding a JWT secure?
Can ForgePlug verify JWT signatures?
Is my JWT token uploaded to a server?
What information can I see in a JWT?
What does the expiration status mean?
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.
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.
Review the header
Check the algorithm (alg) and token type (typ) fields that describe how the token was signed.
Inspect the payload claims
Read the decoded claims as formatted JSON. Verify exp, iat, and any custom fields your app relies on.
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 caseInput
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
