redact-secret · Report
JSON Web Token
RFC 7519 compact-serialization token, not tied to a single issuer.
Research record
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
What it looks like
Shape not recorded.
Format facts
Provider documented ·
provider-source· current · observed 2026-09-17RFC 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-17Pinned scanner rules are consistent with the contract grammar (1 artifact: trufflehog 3.97.4).
- trufflesecurity/trufflehog @ v3.97.4: pkg/detectors/jwt/jwt.goscanner-rule-source · last read 2026-09-17 · latest outcome read · supports trufflehog 3.97.4: jwt/jwt
Provider documented ·
dossier-research· current · observed 2026-09-23Legacy dossier research (verdict ready, tier T1) cited 2 sources; the dossier does not attribute sources to individual properties.
- redact-secret/redact-secret @ 8b6a5fde52ecb4dfce13f09c7a947062d21483c7: docs/audits/evidence/650/README.mdproject-research-note · last read 2026-09-26 · latest outcome read · supports Final research evidence recorded by the legacy dossier
- www.rfc-editor.org/rfc/rfc7519provider-documentation · last read 2026-09-23 · latest outcome read · supports Cited by the legacy dossier research for this family
Open questions
No open question is recorded for this revision.
Benchmark dossier notes
- 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
- 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
| Evidence level | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| T1Provider-documented | 2 | 0 | 0 | 0 |
| T2Tool-corroborated | 12 | 0 | 0 | 0 |
| T3Project policy | 12 | 0 | 0 | 0 |
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.
| Scanner | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| flare-redactRuntime library · 1.6.1 · Published npm package · secrets-only (pii, generic_assignment disabled) · JavaScript engine1 rule targets it | 26 | 0 | 0 | 0 |
| gitleaksRepository scanner · 8.30.1 · Directory scan · default rules2 rules target it | 26 | 0 | 0 | 4 |
| redact-secretProduct measured here · 0.1.0-beta.14 · Published npm package · default detectors1 detector mapped | 26 | 0 | 0 | 0 |
| trufflehogRepository scanner · 3.97.4 · Filesystem scan · verification disabled1 rule targets it | 26 | 9 | 0 | 0 |
Looks like it, but isn't
- Collisions
- ordinary dotted identifiers and missing-signature forms are negatives. Supabase legacy
anonandservice_rolekeys are JWTs too (see redact-secret#472: resolved 2026-09-20 with a scoped exclusion that skips a legacy SupabaseanonJWT only when the payload hasiss=supabaseandrole=anon;service_roleis still reported).
Scanner rules for this family
| Scanner | Rule | What the rule matches |
|---|---|---|
| flare-redact · rules 1.6.1 | jwt | eyJ header . payload . signature |
| gitleaks · rules 8.30.1 | jwt | eyJ header . eyJ payload . signature |
| gitleaks · rules 8.30.1 | jwt-base64 | Base64 of a JWT header (ZXlK...) |
| openredaction · rules 1.1.5 | JWT_TOKEN | eyJ header . eyJ payload . signature |
| trufflehog · rules 3.97.4 | jwt | eyJ header . eyJ payload . signature |
Fixtures in this family
| Fixture | Kind and evidence | redact-secret |
|---|---|---|
jwt-api-bearer-headergeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
jwt-debug-request-loggeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
jwt-eddsa-plain-twingeneric · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
jwt-eddsa-unicode-crlf-twingeneric · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
jwt-env-id-tokengeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
jwt-expired-fabricated-baregeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
jwt-expired-fabricated-quotedgeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
jwt-expired-fabricated-unicode-crlfgeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
jwt-kubectl-create-tokengeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
jwt-missing-signaturegeneric · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
jwt-token-digest-audit-encoded-valuegeneric · benign-encoded-value | Must not flagT2 · Tool-corroborated | Quiet |
jwt-token-response-jsongeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
jwt-websocket-query-tokengeneric · documented-format-literal | Project policyT3 · Project policy | Redacted |
jwt-dotted-trace-context-near-missgeneric · format-near-miss | Must not flagT2 · Tool-corroborated | Quiet |
jwt-eddsa-alphabet-plain-twingeneric · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
jwt-eddsa-alphabet-unicode-crlf-twingeneric · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
jwt-eddsa-plaingeneric · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
jwt-eddsa-unicode-crlfgeneric · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
jwt-expired-fabricated-bare-twingeneric · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
jwt-expired-fabricated-quoted-twingeneric · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
jwt-expired-fabricated-unicode-crlf-twingeneric · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
jwt-jwks-key-ids-public-idgeneric · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
jwt-maskgeneric · benign-lookalike | Must not flagT3 · Project policy | Quiet |
jwt-ordinary-dotted-namegeneric · benign-lookalike | Must not flagT3 · Project policy | Quiet |
jwt-prefix-onlygeneric · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
jwt-referencegeneric · benign-lookalike | Must not flagT3 · Project policy | Quiet |
Sources
Documentation and code
- www.rfc-editor.org/rfc/rfc7519
Research log
- redact-secret/redact-secret#107Research issue
- redact-secret/redact-secret#323Research issue
- redact-secret/redact-secret#650Research issue
- Final evidence, pinned to a commit/redact-secret/redact-secret/blob/8b6a5fde52ecb4dfce13f09c7a947062d21483c7/docs/audits/evidence/650/README.md