JWT Decoder

Your data never leaves your browser

Decode and inspect any JWT token. View header, payload claims, and expiry status. No secret required. Runs 100% in your browser.

JWT Token - paste your token below

Paste a JWT token above to decode it

Ctrl+KClear

Share this tool

Found it useful? Help a fellow developer discover it.

https://developertoolkit.dev/tools/jwt-decoder

What is a JWT?

A JSON Web Token (JWT) is a compact, URL-safe token format defined in RFC 7519. A JWT consists of three Base64url-encoded segments separated by dots: header.payload.signature. The header declares the token type and signing algorithm. The payload carries claims, which are statements about the subject (user ID, roles, expiry time, issuer, etc.). The signature proves the token was issued by a trusted party and has not been tampered with. JWTs are used pervasively in OAuth 2.0, OpenID Connect, and API authentication flows. Decoding a JWT to inspect its claims requires only Base64url decoding. No secret key is needed. Verifying the signature, however, requires the original secret or public key.

How to decode a JWT

  1. Copy a JWT from your application (e.g. from localStorage, a network request header, or your auth library) and paste it into the input field.
  2. The token is decoded instantly. The Header section shows the algorithm and token type.
  3. The Payload section shows all claims with human-readable labels for standard ones (exp, iat, sub, etc.).
  4. The expiry badge at the top shows whether the token is currently valid and how much time remains (or how long ago it expired).
  5. Use Copy Header or Copy Payload to copy the decoded JSON for use in other tools.

Standard JWT claims reference

ClaimFull nameDescription
issIssuerThe principal that issued the token, e.g. https://accounts.google.com
subSubjectThe entity the token represents, typically a user ID
audAudienceThe intended recipients of the token, e.g. your API domain
expExpiration TimeUnix timestamp after which the token must not be accepted
nbfNot BeforeUnix timestamp before which the token must not be accepted
iatIssued AtUnix timestamp when the token was issued
jtiJWT IDUnique identifier for the token, used to prevent replay attacks

Frequently Asked Questions

How do I decode a JWT token online?

Paste the JWT into the input field and the tool decodes it instantly. A JWT is three Base64url-encoded segments separated by dots. This tool splits them, decodes each segment, and displays the header and payload as formatted JSON. No secret key is required for decoding. You only need a secret to verify the signature.

What is the difference between a JWT and a session cookie?

A session cookie stores a session ID on the client and the actual session data lives on the server. On every request, the server looks up the session ID in a database or cache. A JWT stores all the claims directly in the token itself. The server can verify the token and read the claims without a database round-trip, making JWTs well-suited for distributed and stateless architectures.

Is it safe to paste my JWT here?

Yes. This tool runs entirely in your browser. Your JWT is never sent to any server. All Base64url decoding and JSON parsing happens locally in JavaScript. As a general habit, avoid pasting live production tokens into any online tool. Use them only in trusted, browser-local environments like this one.

Can this tool verify the JWT signature?

No. Decoding a JWT only requires Base64url decoding and needs no secret. Verifying the signature requires the original HMAC secret (for HS256/HS512) or the public key (for RS256/ES256). This tool shows the signature bytes but cannot verify authenticity. Use the JWT Generator tool for signing and verification.

What are the standard JWT claims?

RFC 7519 defines several registered claim names: iss (Issuer), sub (Subject), aud (Audience), exp (Expiration Time), nbf (Not Before), iat (Issued At), and jti (JWT ID). All other claims in the payload are private or public claims defined by the application.

Why does "exp" show a timestamp in the past?

The exp claim is a Unix timestamp (seconds since January 1, 1970 UTC). If the current time is past that value, the token is expired. Many JWTs have short lifetimes (15 minutes for access tokens). If you are debugging a production issue with an expired token, the timestamp shown will help you understand when the token was valid.

What algorithms can appear in the header?

Common values for the alg header claim: HS256, HS384, HS512 (HMAC with SHA-2, symmetric), RS256, RS384, RS512 (RSA with SHA-2, asymmetric), ES256, ES384, ES512 (ECDSA, asymmetric), and none (no signature). The alg none variant is a known security risk and should be rejected by properly configured libraries.

Can I decode a JWT from Auth0, Firebase, or Clerk?

Yes. All standards-compliant JWTs from any provider follow the same header.payload.signature format. Paste the token and this tool will decode the header and payload regardless of the issuer or platform.

Related Tools