Skip to main content

JWT Decoder

Decode JSON Web Tokens (JWT) instantly. View header, payload, and signature with human-readable timestamps.

edit_note By Meet Dhameliya
update Updated: Jul 28, 2026
schedule 4 min read

JSON Web Tokens (JWTs) are the standard authentication mechanism for modern web APIs. They consist of three Base64URL-encoded segments separated by dots: the header (algorithm and token type), the payload (claims — user ID, roles, expiration), and the signature (cryptographic verification). Debugging JWT issues — expired tokens, missing claims, wrong algorithms, malformed payloads — requires decoding the token to inspect its contents. The Utility Spark JWT Decoder splits a JWT into its components, decodes the Base64URL payload, and displays the claims in a readable format with timestamps converted to human-readable dates. Importantly, this tool runs entirely in your browser. JWTs contain sensitive authentication data (user IDs, roles, session information). Pasting a production JWT into a server-based decoder sends your authentication credentials to a third party.

lightbulb When to use this tool

  • check_circle Debug authentication issues by inspecting JWT payload claims (sub, iat, exp, aud)
  • check_circle Verify token expiration time without writing code
  • check_circle Check which algorithm (HS256, RS256, ES256) a JWT uses
  • check_circle Inspect custom claims added by your authentication provider
  • check_circle Debug OAuth2 and OpenID Connect token exchanges
  • check_circle Verify token structure before sending in API requests

Why use our tool?

Instant Token Decoding

Paste a JWT and instantly see the decoded header, payload, and signature. Each section is formatted and syntax-highlighted for easy reading. No need to manually Base64-decode individual segments.

Human-Readable Timestamps

JWT timestamps (iat, exp, nbf) are Unix epoch seconds — meaningless at a glance. The decoder converts these to human-readable dates and shows whether the token is currently valid, expired, or not-yet-valid.

Algorithm Identification

Immediately see which signing algorithm the token uses (HS256, RS256, ES256, etc.). This is critical for debugging signature verification failures, which are often caused by algorithm mismatches between token issuer and verifier.

Privacy-Safe Decoding

JWTs contain authentication credentials. The decoder runs entirely in your browser — your tokens are never transmitted to any server. This makes it safe to decode production tokens without compromising security.

Claim Validation Hints

The tool highlights common issues: expired tokens, missing required claims (iss, sub, exp), and unusual or non-standard claims. This accelerates debugging when API calls fail with 401 or 403 errors.

How it works

1

Paste your full JWT token (the three-part string beginning with eyJ...) into the input field.

2

The tool immediately splits the token and displays decoded JSON for the Header and Payload sections.

3

Review the Header for the algorithm (alg) and token type (typ).

4

Review the Payload for all claims: sub, iss, aud, exp, iat, nbf, and any application-specific custom claims.

5

Check the expiry (exp) field — it is displayed as both the raw Unix timestamp and a human-readable datetime.

Examples

science Debugging a 401 — Checking Token Claims

Token header (decoded): {"alg": "HS256", "typ": "JWT"}
Token payload (decoded): {"sub": "user_123", "roles": ["viewer"], "exp": 1690000000, "iat": 1689914000}
Human-readable exp: Expired: 2023-07-22 14:33 UTC
Debug finding: Token expired 12 hours ago — this is the cause of the 401.

science Checking Algorithm for Security Review

Header: {"alg": "none", "typ": "JWT"}
Security flag: alg: none is a critical vulnerability — it means the token has no cryptographic signature and cannot be trusted. A backend that accepts alg:none tokens is vulnerable to token forgery. This is a real vulnerability class (CVE-2015-9235) that the tool surfaces immediately.

Frequently Asked Questions

Can anyone decode a JWT without the secret key? expand_more
Yes. The header and payload of a JWT are only Base64URL-encoded, not encrypted. Anyone with the token can decode and read the contents. The signature ensures the token hasn't been tampered with, but doesn't hide the data. Never put sensitive data (passwords, credit card numbers) in JWT claims.
What does JWT expiration (exp) actually check? expand_more
The 'exp' claim contains a Unix timestamp after which the token should be rejected. API servers compare this timestamp with the current server time. If the current time is past the exp value, the token is expired. Common issues: server clock drift and timezone misconfigurations can cause valid tokens to appear expired.
What is the difference between HS256 and RS256? expand_more
HS256 (HMAC-SHA256) uses a single shared secret for both signing and verification — both parties must know the same secret. RS256 (RSA-SHA256) uses a private key for signing and a public key for verification — the verifier doesn't need the private key. RS256 is preferred for distributed systems where sharing secrets is impractical.
Is it safe to paste my JWT in this tool? expand_more
Yes. This tool decodes JWTs entirely in your browser using JavaScript. The token is never sent to any server. You can verify this by opening your browser's Network tab (F12 → Network) before pasting — no requests will be made. You can even disconnect from the internet and the decoder will still work.
Why does my JWT have three parts separated by dots? expand_more
A JWT consists of three Base64URL-encoded segments: Header (algorithm and token type), Payload (claims like user ID, expiration), and Signature (cryptographic hash ensuring the token wasn't modified). These three parts are concatenated with dots: header.payload.signature.

More Developer & Security