JWT Decoder
Decode and inspect JSON Web Tokens locally, header, payload and expiry claims.
Loading JWT Decoder… If nothing happens, please enable JavaScript.
Frequently asked questions
Is my token uploaded to a server?
What are the three parts of a JWT?
When should I use a JWT in my own application?
How is a JWT different from a session cookie?
Does this tool verify the JWT signature?
What do the standard timestamp claims mean?
Can a JWT be used without a signature (alg: none)?
Are JWT payloads private and confidential?
What is the difference between HS256 and RS256?
What is a common mistake developers make with JWTs?
About JWT Decoder
A JSON Web Token (JWT) is a compact, URL-safe string that encodes a signed set of claims — assertions about a user, a session, or a permission — in a format that any party holding the right key can independently verify. Defined by RFC 7519 (2015) and part of the broader JOSE (JSON Object Signing and Encryption) standards family, JWTs quickly became the dominant mechanism for stateless authentication and API authorisation across web, mobile, and microservice architectures. A JWT consists of three Base64url-encoded segments separated by dots: the header (algorithm metadata), the payload (claims), and the signature.
JWTs appear in virtually every modern authentication flow. OAuth 2.0 access tokens are almost universally issued as JWTs. OpenID Connect ID tokens are JWTs that carry the authenticated user's identity claims. Single sign-on systems pass JWTs between identity providers and service providers. Serverless functions and edge workers validate JWTs locally without a database lookup, enabling stateless, horizontally scalable auth. Mobile apps store JWTs as bearer tokens and include them in the Authorization header of every API request. Understanding what is inside a token — what permissions it grants, when it expires, and who issued it — is a daily task for any backend or security engineer.
This tool decodes the header and payload of any JWT entirely inside your browser. It Base64url-decodes each segment, parses the JSON, and presents the claims in a readable format. Numeric timestamps (iat, exp, nbf) are automatically converted to human-readable dates so you can instantly see whether a token has expired. The signature is displayed as-is but is deliberately not verified: verification requires the issuer's secret (for HMAC) or public key (for RSA/ECDSA), and you should never paste either into an untrusted online tool. Because decoding happens locally, not even the token itself leaves your device.
A few security points to keep in mind: JWTs are signed but not encrypted by default — the payload is merely Base64url-encoded, meaning anyone who intercepts the token can read its claims. Never include sensitive personal data (passwords, credit card numbers) in a JWT payload. The alg: none attack is a known vulnerability in naive JWT libraries that accept unsigned tokens; always use a well-audited library that explicitly validates the algorithm. Also check the exp claim before trusting a token — a valid signature does not mean the token is still active.
The rise of the JSON Web Token
JSON Web Tokens were introduced by the Internet Engineering Task Force (IETF) as part of the JOSE (JSON Object Signing and Encryption) working group, with RFC 7519 published in May 2015. The goal was to create a compact, self-contained credential format that could replace the verbose and complex SAML XML assertions used in enterprise single sign-on systems. The dot-delimited, Base64url-encoded design was deliberately chosen to be URL-safe and to fit comfortably inside an HTTP header.
Adoption was explosive. Within a few years of publication, nearly every major authentication framework — from Auth0 to Firebase Authentication to AWS Cognito — had standardised on JWTs as their token format. The jwt.io website, launched by Auth0 as a debugging tool, became one of the most visited developer utilities on the internet. This popularity also attracted scrutiny: security researchers catalogued a series of implementation vulnerabilities (the 'alg: none' bug, algorithm confusion attacks) that affected naive library implementations, spurring a wave of improvements in JWT libraries across every programming language.
An interesting design choice in JWTs is that the payload is readable by anyone — the signature guarantees integrity but not secrecy. This was intentional: the designers wanted tokens to be debuggable without a key, enabling tools like JWT decoders to help developers inspect tokens during development. The trade-off is that developers must be disciplined about what claims they include, a lesson that has been learned the hard way by teams that accidentally shipped JWTs containing sensitive user data.