redact-secret · Report
Service account token (ops_)
ops_ + the Base64url encoding of a serialized JSON object (so ops_eyJ), variable length; the 250-byte floor after the lead is project policy.
Research record
3 events in the review history: 2 observed, 1 reviewed. Latest: observed on 2026-09-28 by automation, project maintainer. Project-maintained review is not independent validation. The family record at this release.
Format
What it looks like
- Descriptive pattern
^ops_eyJ[A-Za-z0-9_-]{250,}={0,2}$
Parts are shown as recorded. Evidence classes belong to the facts below; no class is assigned to a part.
Format facts
Provider documented ·
provider-source· current · observed 2026-09-28developer.1password.com service-account security page: the ops_ prefix, chosen to help code analyzers, and a serialized object that is Base64 URL encoded (re-checked 2026-09-28; the one encoded example is 634 characters and begins ops_eyJ): ops_ + Base64url of a JSON object (so the body leads eyJ); variable length; the floor of 250 Base64url bytes after ops_eyJ is project policy
- developer.1password.com/docs/service-accounts/security/provider-documentation · last read 2026-09-28 · latest outcome read · supports ops_ + Base64url of a JSON object (so the body leads eyJ); variable length; the floor of 250 Base64url bytes after ops_eyJ is project policy
Unresolved ·
tool-corroboration· current · observed 2026-09-28Pinned scanner rules are consistent with the contract grammar (1 artifact: gitleaks 8.30.1).
- gitleaks/gitleaks @ v8.30.1: config/gitleaks.tomlscanner-rule-source · last read 2026-10-04 · latest outcome read · supports gitleaks 8.30.1: 1password-service-account-token: ops_eyJ[a-zA-Z0-9+/]{250,}={0,3} (standard Base64 class; the contract keeps the provider-stated Base64url class)
Provider documented ·
field-prefix· current · observed 2026-09-28prefix: ops_
- developer.1password.com/docs/service-accounts/security/provider-documentation · last read 2026-09-28 · latest outcome read · supports "uses ops_ as the token prefix", to help code analyzers find accidental exposure
Provider documented ·
field-body-lead· current · observed 2026-09-28body-lead: eyJ (Base64 of {"): the body is a serialized JSON object
- developer.1password.com/docs/service-accounts/security/provider-documentation · last read 2026-09-28 · latest outcome read · supports serialized object, Base64 URL encoded; the example begins ops_eyJ
- github.com/redact-secret/redact-secret/issues/860issue-or-discussion · last read 2026-09-29 · latest outcome read · supports R4/R5 · #issuecomment-5871306275
Provider documented ·
field-alphabet· current · observed 2026-09-28alphabet: Base64url [A-Za-z0-9_-], optional ={0,2} padding kept inside the span (Every sample seen is alphanumeric after the prefix; the contract keeps the stated class. A standard-Base64 + or / is outside it.)
- developer.1password.com/docs/service-accounts/security/provider-documentation · last read 2026-09-28 · latest outcome read · supports "Base64 URL encoded"
- github.com/redact-secret/redact-secret/issues/860issue-or-discussion · last read 2026-09-29 · latest outcome read · supports R8: no narrowing from absence · #issuecomment-5871306275
Provider documented ·
field-length· current · observed 2026-09-28length: variable by construction; one provider example of 634 characters, observed range 634–870
- developer.1password.com/docs/service-accounts/security/provider-documentation · last read 2026-09-28 · latest outcome read · supports one encoded example, measured by script, no value retained
- redact-secret/redact-secret @ 54fe385f718c884d7e3dde6b9756e2d70999ca91: docs/audits/evidence/860/onepassword.mdprovider-documentation · last read 2026-09-28 · latest outcome read · supports length: variable by construction; one provider example of 634 characters, observed range 634–870
Unresolved ·
field-floor· current · observed 2026-09-28floor: at least 250 Base64url bytes after ops_eyJ (A policy floor, not a provider fact: the 249-byte twin is a policy boundary the handoff decides.)
- gitleaks/gitleaks @ v8.30.1: config/gitleaks.tomlscanner-rule-source · last read 2026-10-04 · latest outcome read · supports gitleaks {250,}
- redact-secret/redact-secret @ 54fe385f718c884d7e3dde6b9756e2d70999ca91: docs/audits/evidence/860/onepassword.mdprovider-documentation · last read 2026-09-28 · latest outcome read · supports project policy: far below the documented field set and equal to the gitleaks floor
Provider documented ·
field-connect-token· current · observed 2026-09-28connect-token: the Connect server token (OP_CONNECT_TOKEN) is a standard three-segment JWT (Another credential class the jwt detector keeps: a twin, never a benign control.)
- developer.1password.com/docs/connect/provider-documentation · last read 2026-09-28 · latest outcome read · supports connect-token: the Connect server token (OP_CONNECT_TOKEN) is a standard three-segment JWT
Provider documented ·
field-secret-references· current · observed 2026-09-28secret-references: op://vault/item/field strings are references, not secrets
- developer.1password.com/docs/cli/secret-references/provider-documentation · last read 2026-09-28 · latest outcome read · supports secret-references: op://vault/item/field strings are references, not secrets
Unresolved ·
field-secret-key· current · observed 2026-09-28secret-key: the account Secret Key (A3-…) is a separate credential with its own grammar (Not this family; no fixture asserts it either way.)
- redact-secret/redact-secret @ 54fe385f718c884d7e3dde6b9756e2d70999ca91: docs/audits/evidence/860/onepassword.mdprovider-documentation · last read 2026-09-28 · latest outcome read · supports excluded shapes
Provider documented ·
field-transport· current · observed 2026-09-28transport: the OP_SERVICE_ACCOUNT_TOKEN environment variable, read by the op CLI and the SDKs
- developer.1password.com/docs/service-accounts/provider-documentation · last read 2026-09-28 · latest outcome read · supports transport: the OP_SERVICE_ACCOUNT_TOKEN environment variable, read by the op CLI and the SDKs
Tool corroborated ·
field-peer-lag· current · observed 2026-09-28peer-lag: gitleaks 8.30.1 has a 1password-service-account-token rule (standard Base64 class); trufflehog 3.97.4 has no 1Password service-account detector
- gitleaks/gitleaks @ v8.30.1: config/gitleaks.tomlscanner-rule-source · last read 2026-10-04 · latest outcome read · supports 1password-service-account-token
- trufflesecurity/trufflehog @ v3.97.4: pkg/detectorsscanner-rule-source · last read 2026-09-29 · latest outcome read · supports no service-account token detector
Unresolved ·
listed-references· current · observed 2026-09-28The legacy contract lists 10 references without stating which property each supports.
- developer.1password.com/docs/service-accounts/provider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- developer.1password.com/docs/service-accounts/security/provider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- developer.1password.com/docs/connect/provider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- developer.1password.com/docs/cli/secret-references/provider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- redact-secret/redact-secret @ 54fe385f718c884d7e3dde6b9756e2d70999ca91: docs/audits/evidence/860/tier-b-rerank.mdproject-research-note · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- redact-secret/redact-secret @ 54fe385f718c884d7e3dde6b9756e2d70999ca91: docs/audits/evidence/860/onepassword.mdprovider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- github.com/redact-secret/redact-secret/issues/860issue-or-discussion · last read 2026-09-29 · latest outcome read · supports Listed as a reference by the legacy contract · #issuecomment-5871306275
- github.com/redact-secret/redact-secret/issues/860issue-or-discussion · last read 2026-09-29 · latest outcome read · supports Listed as a reference by the legacy contract
- github.com/redact-secret/redact-secret/issues/913issue-or-discussion · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- github.com/redact-secret/redact-secret-benchmarks/issues/436issue-or-discussion · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
Provider documented ·
dossier-research· current · observed 2026-09-28Legacy dossier research (verdict ready, tier T1) cited 2 sources; the dossier does not attribute sources to individual properties.
- developer.1password.com/docs/service-accounts/security/provider-documentation · last read 2026-09-28 · latest outcome read · supports Cited by the legacy dossier research for this family
- redact-secret/redact-secret @ 8b6a5fde52ecb4dfce13f09c7a947062d21483c7: docs/audits/evidence/860/onepassword.mdproject-research-note · last read 2026-09-28 · latest outcome read · supports Final research evidence recorded by the legacy dossier
Provider documented ·
taxonomy-sources· current · observed 2026-09-28The legacy taxonomy lists 1 source for this family. The taxonomy records no date; the dossier researchedAt is used as the observed-at date.
- developer.1password.com/docs/service-accounts/security/provider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a source for this family in the legacy taxonomy
Open questions
No open question is recorded for this revision.
Benchmark dossier notes
- Shape
- prefix
ops_, then a Base64url body beginningeyJ(Base64 of a JSON object opening), variable length, optional=padding kept inside the span. The docs example is 634 characters; the observed range in the research is 634 to 870. - Basis
- T1 from the provider page: the format "uses
ops_as the token prefix" and the rest is "Base64 URL encoded". TheeyJlead follows from that and from the docs example (R4, R5). The documented alphabet is Base64url, so the handoff uses[A-Za-z0-9_-]rather than the alphanumeric-only samples or gitleaks' standard-Base64 class. The 250-byte floor matches an existing gitleaks floor and is policy. Re-checked 2026-09-28. - Issuance
- not attempted.
- Contract in core
- detector-families.md.
In this benchmark
- Fixtures
- 39
- Left readable
- 0
- Redacted too much
- 0
- False alarms
- 0
39 fixtures: 16 expect a redaction, 23 must stay quiet. See every row
| Evidence level | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| T1Provider-documented | 16 | 0 | 0 | 0 |
| T2Tool-corroborated | 15 | 0 | 0 | 0 |
| T3Project policy | 8 | 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 engineNo rule maps to it | 39 | 15 | 1 | 0 |
| gitleaksRepository scanner · 8.30.1 · Directory scan · default rules1 rule targets it | 39 | 16 | 0 | 0 |
| redact-secretProduct measured here · 0.1.0-beta.14 · Published npm package · default detectors1 detector mapped | 39 | 0 | 0 | 0 |
| trufflehogRepository scanner · 3.97.4 · Filesystem scan · verification disabledNo rule maps to it | 39 | 16 | 0 | 0 |
Benchmark dossier questions
- Open caveat
- Length is variable by construction, with one T1 example; the minimum of 250 Base64url bytes after the prefix is project policy, not a provider fact.
Looks like it, but isn't
- Collisions
- the Connect server token (
OP_CONNECT_TOKEN) is a standard JWT. The Account Secret Key is a separate credential.op://vault/item/fieldsecret references are not secrets.
Scanner rules for this family
| Scanner | Rule | What the rule matches |
|---|---|---|
| gitleaks · rules 8.30.1 | 1password-service-account-token | ops_eyJ + Base64 body |
No rule maps to this family in flare-redact, openredaction, trufflehog.
Fixtures in this family
| Fixture | Kind and evidence | redact-secret |
|---|---|---|
onepassword-service-account-token-actions-envonepassword · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
onepassword-service-account-token-bare-proseonepassword · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
onepassword-service-account-token-bearer-headeronepassword · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
onepassword-service-account-token-chat-pasteonepassword · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
onepassword-service-account-token-dotenvonepassword · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
onepassword-service-account-token-exportonepassword · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
onepassword-service-account-token-json-api-keyonepassword · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
onepassword-service-account-token-json-tokenonepassword · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
onepassword-service-account-token-key-shape-bareonepassword · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
onepassword-service-account-token-key-shape-quotedonepassword · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
onepassword-service-account-token-key-shape-unicode-crlfonepassword · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
onepassword-service-account-token-mcp-envonepassword · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
onepassword-service-account-token-op-clionepassword · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
onepassword-service-account-token-python-sdkonepassword · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
onepassword-service-account-token-sdk-kwargonepassword · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
onepassword-service-account-token-x-api-key-headeronepassword · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
onepassword-service-account-token-account-and-vault-public-idonepassword · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
onepassword-service-account-token-actions-secret-referenceonepassword · templated-reference | Must not flagT3 · Project policy | Quiet |
onepassword-service-account-token-body-249-twinonepassword · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
onepassword-service-account-token-cache-digest-encoded-valueonepassword · benign-encoded-value | Must not flagT2 · Tool-corroborated | Quiet |
onepassword-service-account-token-connect-jwt-twinonepassword · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
onepassword-service-account-token-ellipsis-placeholderonepassword · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
onepassword-service-account-token-hyphen-prefix-twinonepassword · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
onepassword-service-account-token-label-proseonepassword · benign-lookalike | Must not flagT3 · Project policy | Quiet |
onepassword-service-account-token-leading-glue-twinonepassword · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
onepassword-service-account-token-lowercase-j-twinonepassword · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
onepassword-service-account-token-maskonepassword · benign-lookalike | Must not flagT3 · Project policy | Quiet |
onepassword-service-account-token-masked-placeholderonepassword · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
onepassword-service-account-token-ops-identifiers-public-idonepassword · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
onepassword-service-account-token-padding-inside-body-twinonepassword · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
onepassword-service-account-token-plus-in-body-twinonepassword · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
onepassword-service-account-token-prefix-onlyonepassword · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
onepassword-service-account-token-referenceonepassword · benign-lookalike | Must not flagT3 · Project policy | Quiet |
onepassword-service-account-token-secret-reference-referenceonepassword · templated-reference | Must not flagT3 · Project policy | Quiet |
onepassword-service-account-token-short-bodyonepassword · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
onepassword-service-account-token-slash-in-body-twinonepassword · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
onepassword-service-account-token-token-guidance-proseonepassword · prose-mention | Must not flagT3 · Project policy | Quiet |
onepassword-service-account-token-truncated-near-missonepassword · format-near-miss | Must not flagT2 · Tool-corroborated | Quiet |
onepassword-service-account-token-uppercase-prefix-twinonepassword · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
Sources
Documentation and code
- developer.1password.com/docs/service-accounts/security/
Research log
- redact-secret/redact-secret#860Research issue
- redact-secret/redact-secret#913Research issue
- redact-secret/redact-secret-benchmarks#436Research issue
- Final evidence, pinned to a commit/redact-secret/redact-secret/blob/8b6a5fde52ecb4dfce13f09c7a947062d21483c7/docs/audits/evidence/860/onepassword.md