JWT Signature Verifier

Verify JWT signatures locally, decode claims, and catch algorithm or expiry problems.

JWT Signature Verifier

Verify JWT signatures locally (HS*, RS*, ES*) and decode claims.

Tip: If you copied an Authorization header, the tool can handle values that start with Bearer.
For RSA/ECDSA, paste a PEM public key block (SPKI), usually starting with -----BEGIN PUBLIC KEY-----.
Privacy note
Click Verify to run locally in your browser. The form submission is intercepted so the token and key are not sent to the server.
Not verified
Paste a token and key, then click Verify.
Verifying…
No output yet
Configure settings and click Verify.
Copied text excludes your key.
Copied

About JWT Signature Verifier

JWT Signature Verifier for JSON Web Tokens

A JSON Web Token (JWT) is only trustworthy if its signature verifies against the correct key. This JWT Signature Verifier helps you confirm that a token has not been tampered with by checking the cryptographic signature and decoding the header and payload in a readable format. The verification runs locally in your browser so you can test tokens without sending them to an external API.

How JWT Signature Verifier Works

JWTs are made of three Base64URL-encoded parts: header, payload, and signature. A verifier reconstructs the “signing input” (header + payload), applies the algorithm declared by the token (or selected by you), and checks that the provided signature matches what the key would produce. If the signature is valid, you can safely interpret the token claims (subject, issuer, audience, expiration, and custom fields) according to your application rules.

Under the hood, the tool uses the Web Crypto API built into modern browsers. That API exposes hardened primitives for HMAC, RSA, and ECDSA verification. Instead of re-implementing cryptography in JavaScript, the verifier focuses on correct JWT parsing, Base64URL decoding, algorithm mapping, key import, and clear reporting of success or failure.

Step-by-Step Verification

  • 1. Paste a JWT: Provide the full token in the standard header.payload.signature format. The tool trims whitespace and can handle tokens copied from an Authorization header (for example, a value that starts with Bearer).
  • 2. Inspect the header: The header is decoded first so you can see the declared alg and any kid value that points to a specific key.
  • 3. Provide the key: For HMAC algorithms (HS256/HS384/HS512) use the shared secret exactly as configured in your issuer. For RSA/ECDSA algorithms (RS*/ES*) use a PEM-encoded public key that corresponds to the signing private key.
  • 4. Select an algorithm: Use Auto (from token header) to follow the token’s alg value, or pick a specific algorithm when you want strict comparisons during audits and migrations.
  • 5. Verify the signature: The tool reconstructs the signing input, imports the key with Web Crypto, and validates the signature bytes against the header+payload data.
  • 6. Review decoded claims: View the decoded header and payload JSON, plus optional checks for time-based claims like exp, nbf, and iat.
  • 7. Export results: Copy the summary for a ticket, or download it as a text file for a security review or integration note.

Key Features

Local, Privacy-First Verification

Verification is performed in your browser using the built-in Web Crypto API. That means your token and key stay on your device, which is helpful when troubleshooting production-like tokens, confidential test credentials, or customer-specific integrations. Unlike online verifiers that send data to a server, this approach reduces accidental leakage of secrets and signed payloads.

If you work in a regulated environment, local verification also makes it easier to comply with internal policies: you can validate signatures on a locked-down workstation without requesting access to external tools. For teams that share debugging steps, the downloaded summary is a safe way to communicate what happened without exposing the signing key.

Supports Common JWT Algorithms

The tool is designed around the most widely used JWS algorithms: HMAC (HS256/HS384/HS512), RSA (RS256/RS384/RS512), and ECDSA (ES256/ES384/ES512). It reads the algorithm from the token header in Auto mode and warns you when the selected algorithm does not match the token’s declared alg. This is particularly useful when migrating identity providers, rotating keys, or integrating third-party APIs that document one algorithm but deliver another.

In strict mode, the verifier treats an algorithm mismatch as invalid. That behavior aligns with the idea that you should trust your application configuration more than token metadata, and it helps prevent “algorithm confusion” mistakes during implementation.

Readable Decoding of Header and Payload

In addition to the validity status, you get pretty-printed JSON for both the header and payload. This helps you quickly check fields like kid, typ, iss, aud, sub, and any custom claims your system uses.

The decoded output is intentionally formatted for review: stable indentation, consistent ordering where possible, and clear separation between header and payload. When you are comparing two tokens side by side, this readability makes differences stand out immediately.

Time Claim Checks with Configurable Skew

JWT time claims are a common source of “it works locally but not in production” issues. Enable time validation to check exp (expiration), nbf (not before), and iat (issued at) against your current browser time. You can set a clock skew (in seconds) to model real-world differences between servers and clients.

The check is intentionally conservative: it reports missing claims as warnings rather than failures, because some token types (for example, refresh tokens) may omit certain fields. You can use the warnings to tighten your token policy over time.

Copy and Download Results

Once the token is verified (or fails verification), you can copy a detailed summary to your clipboard or download it as a text file. This is useful when filing bugs, documenting an integration, or attaching evidence to a security ticket. The summary includes the algorithm used, validity status, and decoded JSON so the recipient can understand the outcome without re-running the check.

Because output is plain text, it also works well with code review tools and incident timelines. You can paste the summary into a pull request discussion to confirm that a change in signing configuration had the intended effect.

Use Cases

  • API debugging: Confirm that a backend is signing tokens with the expected key and algorithm before you chase unrelated authorization issues.
  • Frontend authentication tests: Validate tokens received from an identity provider and inspect claims used to drive UI decisions (roles, permissions, feature flags).
  • Key rotation validation: Check whether a token signed with a new key still validates correctly and whether the kid header aligns with your key set.
  • Security reviews: Detect algorithm confusion (for example, a mismatch between expected RS256 and an incoming HS256 token) and validate that critical claims are present.
  • Incident response: Quickly determine whether a suspicious token has been modified, whether it expired, or whether the wrong key is being used by an upstream service.
  • Cross-team handoffs: When one team issues tokens and another consumes them, use the verifier to agree on a shared, testable example and spot misunderstandings early.
  • Learning and training: Explore how JWTs are structured and how signature verification differs between shared-secret and public-key schemes.

In practice, most teams use a JWT verifier as a fast “truth check” during development: you paste a token, paste the key, and immediately see whether the cryptographic signature is valid and whether the claims match what your application expects. When the tool reports “invalid,” you can narrow down the root cause to a key mismatch, an algorithm mismatch, an altered payload, or a broken signature encoding.

For public-key JWTs (RS* and ES*), the verifier is also helpful when working with JWKS endpoints. Many identity providers publish keys as JWK objects. Once you convert the JWK to a PEM public key, you can verify a sample token locally to confirm that you extracted the correct key and that your system is selecting the right key by kid.

Optimization Tips

Prefer Auto Mode, Then Switch to Strict

Auto mode is convenient because it follows the token’s declared alg value. Once you confirm decoding works, enable strict matching (or select a fixed algorithm) to catch configuration drift, such as a service unexpectedly switching from RS256 to HS256 or from ES256 to ES384. Strict mode is also a good habit when you are writing verification logic in code, because it mirrors how a well-configured library behaves.

Use Correct Key Material for the Algorithm

HMAC algorithms require the exact shared secret bytes used to sign the token; even a trailing newline changes the signature. If you copy a secret from an environment variable, check whether it includes quotes or whitespace. RSA and ECDSA algorithms require a public key in PEM format (typically -----BEGIN PUBLIC KEY-----). If you only have a private key, export its public part for verification, and ensure you are using the correct curve for ES* algorithms.

If your issuer provides a certificate (X.509) rather than a raw public key, extract the public key from the certificate before pasting it. The verifier expects a standard SPKI public key block, which is the most interoperable format for browser-based cryptography.

Validate Time Claims with Realistic Skew

If you see intermittent failures, time claims are often the culprit. Set a skew that matches your environment, such as 30–120 seconds, and ensure all systems use synchronized time (NTP). For short-lived access tokens, even minor drift can cause unexpected expirations. When you are verifying tokens on a developer machine, remember that laptop clocks can drift more than servers.

When debugging, compare the browser time used by this tool to the issuing server’s time. If the issuer is ahead, a token can appear “not active yet” because nbf is in the future. If the issuer is behind, tokens can appear expired early. Adjusting skew helps you diagnose which side is drifting.

FAQ

A valid signature means the token contents were signed by someone with the correct key and have not been changed since signing. Your application still needs to validate claims such as issuer, audience, scopes, and expiration, and apply your own authorization rules. Think of signature verification as the first gate, not the entire security policy.

Paste a PEM-encoded public key (SPKI) that corresponds to the private key used to sign the token. Many systems publish public keys through a JWKS endpoint; you can convert a JWK to PEM using your preferred tooling if needed. If the header contains a kid, make sure you selected the public key that matches that key ID.

The mismatch warning appears when the algorithm you selected differs from the token header alg. This can indicate an integration issue or a security concern. In strict mode, the verifier treats a mismatch as invalid to prevent confusion attacks and to ensure you always verify with the algorithm you intend to trust.

Tokens using alg = none are unsigned and should be treated as invalid for most real systems. This verifier marks such tokens as invalid and recommends using a signed algorithm appropriate for your environment. If you encounter unsigned tokens, consider them a red flag unless your system explicitly isolates them for non-security use.

JWTs use a raw signature format for ES* algorithms, while many cryptography libraries expect DER-encoded signatures. A verifier must convert between these formats. If you see failures, confirm you are using the correct curve (P-256, P-384, or P-521) and that the public key matches the signing key. Also ensure the token signature length matches the curve requirements, because truncated or padded signatures will not verify.

Why Choose This JWT Signature Verifier?

This tool focuses on the part of JWT handling that most directly affects trust: signature validation. Instead of only decoding the token, it tells you whether the signature is actually correct for the key and algorithm you provide, and it highlights common pitfalls such as algorithm mismatches and time-claim drift. The output is structured for fast debugging, with a clear validity status and readable JSON for both header and payload.

Because the verifier runs in the browser, you can keep sensitive tokens local while still getting strong cryptographic checks backed by modern Web Crypto primitives. Use it as a quick diagnostic during development, a sanity check during key rotation, or a learning aid when comparing HS*, RS*, and ES* JWTs. When your team needs to answer “is this token genuinely signed and still valid?”, this verifier helps you reach that answer in seconds.

Beyond day-to-day debugging, a dedicated verifier encourages better habits. It makes it easy to confirm that tokens are signed with an expected algorithm, that keys are being rotated correctly, and that time policies are aligned across services. Over time, those small checks reduce the chance of shipping a configuration mistake that becomes a security incident.