Skip to content
Benchmarks

redact-secret · Report

JSON Web Token

RFC 7519 compact-serialization token, not tied to a single issuer.

  • Not provider-specific
  • Detectors: jwt
  • Run 2026-10-07
  • Mode published · redact-secret 0.1.0-beta.14
  • Dossier verdictReady
  • Dossier evidence levelT1 · Provider-documented
  • Dossier researched2026-09-23

Research record

From credential-evidence snapshot-2026.10.06.4 · records at 77ce761 · schema 1.8.0. It describes the research on the format, not what any scanner or the product does, and not a support status.
  • Review stateDraft, not reviewed
  • Format revision1 · current
  • ResearchResearched
  • Researched2026-09-23

2 events in the review history: 1 observed, 1 reviewed. Latest: observed on 2026-09-23 by automation, project maintainer. Project-maintained review is not independent validation. The family record at this release.

Format

Provider format research from credential-evidence snapshot-2026.10.06.4 · records at 77ce761 · schema 1.8.0.

What it looks like

Shape not recorded.

Format facts

  • Provider documented · provider-source · current · observed 2026-09-17

    RFC 7519 compact serialization: three base64url segments; the reviewed control is additionally signature-verified offline

    • www.rfc-editor.org/rfc/rfc7519provider-documentation · last read 2026-09-23 · latest outcome read · supports three base64url segments; the reviewed control is additionally signature-verified offline
  • Unresolved · tool-corroboration · current · observed 2026-09-17

    Pinned scanner rules are consistent with the contract grammar (1 artifact: trufflehog 3.97.4).

  • Provider documented · dossier-research · current · observed 2026-09-23

    Legacy dossier research (verdict ready, tier T1) cited 2 sources; the dossier does not attribute sources to individual properties.

Open questions

No open question is recorded for this revision.

Benchmark dossier notes

From the provider dossier, as written. The evidence level above says how well the format is backed; a fact the dossier does not record is not shown.
Shape
RFC 7519 §3 compact serialization: URL-safe parts separated by .; header decodes to a JSON object (§7.2). Every segment is base64url, so + and / are out of grammar (re-checked 2026-09-20 in the benchmarks work). The span is the whole compact serialization.
Basis
T1, RFC 7519. The reviewed control is signature-verified offline. TruffleHog skips HMAC JWTs, a policy difference, not a grammar one.
Issuance
synthetic tokens can be generated locally.
Contract in core
detector-families.md; #650 record. False-positive controls were added in redact-secret#323.

In this benchmark

Fixture rows on the current run. Counts are for redact-secret in published · redact-secret 0.1.0-beta.14 mode.
Fixtures
26
Left readable
0
Redacted too much
0
False alarms
0

26 fixtures: 2 expect a redaction, 15 must stay quiet, 9 record project policy. See every row

redact-secret fixture counts by evidence level
Evidence levelFixturesLeft readableToo muchFalse alarms
T1Provider-documented2000
T2Tool-corroborated12000
T3Project policy12000

Every scanner on the same fixtures

In run order. Counts are what each scanner recorded on this family's fixtures, whichever rules it has; a scanner with no rule for the family has nothing to report on it.

Counts per scanner on this family's fixtures
ScannerFixturesLeft readableToo muchFalse alarms
flare-redactRuntime library · 1.6.1 · Published npm package · secrets-only (pii, generic_assignment disabled) · JavaScript engine1 rule targets it26000
gitleaksRepository scanner · 8.30.1 · Directory scan · default rules2 rules target it26004
redact-secretProduct measured here · 0.1.0-beta.14 · Published npm package · default detectors1 detector mapped26000
trufflehogRepository scanner · 3.97.4 · Filesystem scan · verification disabled1 rule targets it26900

Looks like it, but isn't

Values the dossier records as resembling this credential without being one.
Collisions
ordinary dotted identifiers and missing-signature forms are negatives. Supabase legacy anon and service_role keys are JWTs too (see redact-secret#472: resolved 2026-09-20 with a scoped exclusion that skips a legacy Supabase anon JWT only when the payload has iss=supabase and role=anon; service_role is still reported).

Scanner rules for this family

Mapped by hand (reviewed 2026-09-30) from each scanner's pinned rule file, never from what a scanner found on the fixtures.
Peer scanner rules that target this family
ScannerRuleWhat the rule matches
flare-redact · rules 1.6.1jwteyJ header . payload . signature
gitleaks · rules 8.30.1jwteyJ header . eyJ payload . signature
gitleaks · rules 8.30.1jwt-base64Base64 of a JWT header (ZXlK...)
openredaction · rules 1.1.5JWT_TOKENeyJ header . eyJ payload . signature
trufflehog · rules 3.97.4jwteyJ header . eyJ payload . signature
26 of 26 rows

Fixtures in this family

26 rows, redact-secret's outcome on each. Rows that need a look come first (0), then the rest in corpus order. Choose "Every scanner" to see each scanner's outcome for the same rows.
Fixtures in JSON Web Token
FixtureKind and evidenceredact-secret
jwt-api-bearer-headergeneric · documented-format-literalProject policyT3 · Project policyRedacted
jwt-debug-request-loggeneric · documented-format-literalProject policyT3 · Project policyRedacted
jwt-eddsa-plain-twingeneric · boundary-violationMust not flagT2 · Tool-corroborated · twinQuiet
jwt-eddsa-unicode-crlf-twingeneric · boundary-violationMust not flagT2 · Tool-corroborated · twinQuiet
jwt-env-id-tokengeneric · documented-format-literalProject policyT3 · Project policyRedacted
jwt-expired-fabricated-baregeneric · documented-format-literalProject policyT3 · Project policyRedacted
jwt-expired-fabricated-quotedgeneric · documented-format-literalProject policyT3 · Project policyRedacted
jwt-expired-fabricated-unicode-crlfgeneric · documented-format-literalProject policyT3 · Project policyRedacted
jwt-kubectl-create-tokengeneric · documented-format-literalProject policyT3 · Project policyRedacted
jwt-missing-signaturegeneric · benign-lookalikeMust not flagT2 · Tool-corroboratedQuiet
jwt-token-digest-audit-encoded-valuegeneric · benign-encoded-valueMust not flagT2 · Tool-corroboratedQuiet
jwt-token-response-jsongeneric · documented-format-literalProject policyT3 · Project policyRedacted
jwt-websocket-query-tokengeneric · documented-format-literalProject policyT3 · Project policyRedacted
jwt-dotted-trace-context-near-missgeneric · format-near-missMust not flagT2 · Tool-corroboratedQuiet
jwt-eddsa-alphabet-plain-twingeneric · wrong-alphabetMust not flagT2 · Tool-corroborated · twinQuiet
jwt-eddsa-alphabet-unicode-crlf-twingeneric · wrong-alphabetMust not flagT2 · Tool-corroborated · twinQuiet
jwt-eddsa-plaingeneric · documented-format-literalMust redactT1 · Provider-documentedRedacted
jwt-eddsa-unicode-crlfgeneric · documented-format-literalMust redactT1 · Provider-documentedRedacted
jwt-expired-fabricated-bare-twingeneric · wrong-alphabetMust not flagT2 · Tool-corroborated · twinQuiet
jwt-expired-fabricated-quoted-twingeneric · wrong-alphabetMust not flagT2 · Tool-corroborated · twinQuiet
jwt-expired-fabricated-unicode-crlf-twingeneric · wrong-alphabetMust not flagT2 · Tool-corroborated · twinQuiet
jwt-jwks-key-ids-public-idgeneric · public-identifierMust not flagT2 · Tool-corroboratedQuiet
jwt-maskgeneric · benign-lookalikeMust not flagT3 · Project policyQuiet
jwt-ordinary-dotted-namegeneric · benign-lookalikeMust not flagT3 · Project policyQuiet
jwt-prefix-onlygeneric · benign-lookalikeMust not flagT2 · Tool-corroboratedQuiet
jwt-referencegeneric · benign-lookalikeMust not flagT3 · Project policyQuiet

Sources

Researched 2026-09-23.

Documentation and code

Research log