b2KIT

JWT Debugger & Inspector

Decode and inspect JWT headers, payloads, and signatures with syntax highlighting and human-readable timestamps.

Tested tool guide Tested browser tools Checked August 16, 2026

What JWT Debugger & Inspector does, with a checked example

JWT compact serialization often looks opaque even though its first two sections are only Base64url-encoded. This inspector separates a three-section signed or unsecured token into its protected header, JSON claims payload, and signature section, adds JSON syntax highlighting, and renders recognized NumericDate values in readable form. The central trap is treating successful decoding as authentication. Anyone who has a token can read or alter those claims; trust requires independent signature verification and application-specific claim checks. Because tokens can contain identifiers or authorization data, inspection happens entirely in the browser and nothing is uploaded.

Worked example

A concrete input and expected output from the current implementation.

Input

eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiIxMjMifQ.

Expected output

Header: {"alg":"none","typ":"JWT"}
Payload: {"sub":"123"}
Signature: empty

The first two segments decode from Base64url to the stated JSON objects. The final dot supplies an empty third segment, as required for an unsecured JWT using "alg":"none"; there is no timestamp to convert.

How the result is produced

1

Segment decoding

For a three-part compact token, the text before the first dot is decoded from Base64url as protected header JSON, and the middle section becomes the claims JSON. The final section is displayed as signature material rather than interpreted as claims. Base64url uses the URL-safe characters "-" and "_" and commonly omits trailing "=" padding.

2

Claim and time inspection

After the payload is parsed, syntax highlighting distinguishes objects, arrays, strings, numbers, booleans, and null values. Registered NumericDate claims such as "exp", "nbf", and "iat" count seconds from 1970-01-01T00:00:00Z, so their readable dates are derived from seconds, not 13-digit JavaScript milliseconds. Other registered claims include "iss", "sub", "aud", and "jti"; public and private claim names can also appear.

Good uses

  • Inspect a JWT access token or ID token received during login to see its issuer, audience, subject, scopes, and expiry information.
  • Compare the displayed "alg" and "kid" header values with the signing configuration expected by an application while diagnosing authentication failures.
  • Translate "iat", "nbf", and "exp" values into readable times when investigating a token that appears premature, expired, or issued at an unexpected moment.

Limits and checks

  • Readable JSON proves only that the segments can be decoded and parsed. It does not prove that the signature is correct, the issuer is trusted, or the token is currently acceptable.
  • Header fields such as "alg" and "kid" are supplied by the token itself. Treat them as untrusted input until a verifier applies an independently configured algorithm and key policy.
  • A five-part encrypted JWE does not expose its plaintext claims through Base64url decoding alone. Decryption requires the appropriate key and algorithms, while malformed or opaque tokens may contain no inspectable JSON payload.

Common questions

Does a successfully decoded JWT mean it is valid?

No. Decoding requires no secret and establishes neither origin nor integrity. Validation normally includes checking the cryptographic signature with a trusted key, restricting acceptable algorithms, and evaluating claims such as issuer, audience, expiration, and not-before time according to the receiving application's policy. A displayed signature section is not evidence that those checks passed.

Can I change a decoded claim and keep the existing signature?

No. In a signed JWT, the encoded header and payload form the input covered by the signature. Changing either section changes that input, so the old signature no longer matches. Producing a valid replacement requires an authorized signer and the correct signing key. With "alg":"none", there is no signature protection to preserve.

References and verification

The example and behavioral notes were checked against the browser implementation. Standards and primary references below define the relevant format, formula, or platform behavior.

Related Tools