webby.tools

JWT Decoder

Paste a JSON Web Token (JWT) below to decode and inspect its header, payload claims, and signature. Decoding happens entirely in your browser — your token is never sent to any server.

What Is a JWT?

A JSON Web Token (JWT) is a compact, URL-safe way to transmit claims between two parties. It is the standard credential format used by OAuth 2.0, OpenID Connect, and most modern REST APIs for authentication and authorization. A JWT is made up of three Base64URL-encoded sections joined by dots (.):

Part Description Example value
Header Token type and signing algorithm {"alg":"HS256","typ":"JWT"}
Payload Claims — statements about the user and token metadata {"sub":"1234","exp":1893456000}
Signature Cryptographic signature to verify the token has not been tampered with SflKxwRJSMeKKF2QT4fwpMeJf36…

Because the header and payload are only encoded (not encrypted), any party can read the contents. The signature is what prevents tampering — it is computed using a secret key (for HMAC algorithms like HS256) or a private key (for RSA/ECDSA algorithms like RS256). Never put sensitive data such as passwords in a JWT payload unless the token is also encrypted (JWE).

Standard JWT Claims Explained

The JWT specification (RFC 7519) defines a set of registered claim names. While none are required, most well-formed tokens include several of these:

Claim Name Description
iss Issuer The system or server that issued the token (e.g., https://auth.example.com).
sub Subject The principal the token represents — typically a user ID.
aud Audience The recipient(s) the token is intended for. Servers should reject tokens where aud does not match.
exp Expiration Unix timestamp after which the token must no longer be accepted.
nbf Not Before Unix timestamp before which the token must not be accepted.
iat Issued At Unix timestamp when the token was issued. Useful for determining token age.
jti JWT ID A unique identifier for the token, used to prevent replay attacks.

Applications frequently add their own custom claims alongside these registered ones — for example, role, email, scope, or permissions. These are called private claims.

Common JWT Algorithms

The alg field in the header tells receiving parties how the signature was created. Common values are:

  • HS256 / HS384 / HS512 — HMAC with SHA-256/384/512. Uses a single shared secret. Fast and simple, but both issuer and verifier must know the secret.
  • RS256 / RS384 / RS512 — RSA with SHA-256/384/512. Uses a private key to sign and a public key to verify. Better for multi-service architectures where verifiers should not know the signing secret.
  • ES256 / ES384 / ES512 — ECDSA with SHA-256/384/512. Produces smaller signatures than RSA with similar security.
  • none — No signature. Should never be accepted by a secure server.

Frequently Asked Questions

Is it safe to paste my JWT into this tool?

Yes — decoding happens entirely in your browser using JavaScript. No data is transmitted to any server. However, as a general rule, treat JWTs like passwords: avoid pasting production access tokens into any website you do not fully trust. If you need to inspect a sensitive token, copy the JavaScript from this page and run it in your browser's developer console instead.

Does this tool verify the JWT signature?

No. Verifying a signature requires the secret key (for HMAC) or the public key (for RSA/ECDSA). This tool only decodes — it reads the base64url-encoded data and displays it in a readable format. To verify a signature programmatically, use a library like jsonwebtoken (Node.js), PyJWT (Python), or your platform's built-in JWT support.

Why is my JWT showing as expired even though my app accepts it?

Some servers allow a small clock-skew window (typically 30–60 seconds) when validating the exp claim, so a token a minute past expiration might still be accepted. Others issue tokens with no exp claim at all, which means they never expire. This tool uses your browser's current time to evaluate expiration, with no clock-skew tolerance applied.

What is base64url encoding?

JWTs use a variant of Base64 called base64url, which replaces + with -, / with _, and omits the = padding characters. This makes the token safe to embed in URLs and HTTP headers without extra encoding. If you need to convert to or from standard Base64, the Base64 encoder and Base64 decoder on this site can help.

Can I use this tool to debug JWTs from any provider?

Yes. The decoder handles tokens from any standard-compliant provider — Auth0, Firebase, AWS Cognito, Okta, Google, Microsoft Azure AD, Keycloak, and custom implementations — as long as the token follows the three-part header.payload.signature format defined in RFC 7519.

What's the difference between a JWT and an opaque token?

An opaque token is a random string with no embedded data; only the issuing server can look up what it means (typically via a database query). A JWT carries its own claims, so any service that trusts the signature can validate the token without a database lookup. This makes JWTs well-suited for stateless, distributed systems — but it also means a JWT cannot be revoked before it expires unless you maintain a token blocklist.

This website may contain affiliate links. If you click on an affiliate link and make a purchase, we may receive a small commission at no additional cost to you.