secrets-engine/docs/service-auth.md
tegwick 3abee434df
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Add named engine auth and accessor-file session revoke
Select service-jwt, bootstrap, or env exclusively: JWT login uses a JSON
file, self-revokes, and never falls back to bootstrap or BAO_TOKEN. The
platform JWT mount/role is still unpublished, so auto keeps named
bootstrap/env providers.

session revoke --accessor-file revokes an already-issued token with
fingerprint-only evidence. Production remains fail-closed.

Assistant: grok
Assistant-Session: 01a05f07-ae72-7781-9fcb-19efd61add00
2026-09-02 01:24:08 +02:00

1.8 KiB

KeyCape service-auth consumer boundary

secrets-engine now implements the consumer half of KeyCape's accepted secrets-engine-openbao service-auth contract. It performs one explicit HTTPS client_credentials exchange, keeps the resulting JWT in memory, and validates the non-cryptographic contract before any future OpenBao login:

  • subject service:secrets-engine, audience/client secrets-engine-openbao;
  • service principal in tenant:coulomb, role secrets-engine;
  • exact openbao:login scope and KeyCape AAL1 client-secret assurance;
  • RS256 declaration, bounded issue/expiry timestamps, maximum 15-minute life, and renewal when no more than three minutes remain;
  • no ID token, refresh token, implicit retry provider, or fallback identity.

The confidential-client secret must be an explicitly selected mode-0600 file outside every Git worktree. It is sent with HTTP Basic authentication and never placed in a request body, command argument, evidence record, or object representation.

JWT payload parsing does not prove a signature. OpenBao must verify RS256 against the configured issuer before issuing a token. railiance-platform owns the exact OpenBao JWT auth mount/role, issuer keys, claim bindings, token policy, TTL/use limits, and cryptographic verification.

When SECRETS_ENGINE_OPENBAO_JWT_LOGIN names that contract, the CLI selects service-jwt and logs in for one command, then self-revokes the OpenBao token. Failure of that path never falls back to --bootstrap-token-file, BAO_TOKEN, or AppRole. Until the contract is published, --auth auto keeps those named providers and --auth service-jwt fail-closes. See openbao-jwt-login.md.

Canonical provider contract: key-cape/docs/openbao-service-auth-contract.md (reviewed 2026-08-23).