access-engine/docs/decisionpep-adapter.md
tegwick ca0cb75729
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 2s
Build and Publish Container Image / build-and-push (push) Successful in 1m22s
Add producer-owned authenticated Go decision client and validated Forgejo profile
Assistant: codex
Assistant-Model: gpt-6.1-sol
Assistant-Session: 01a14bfc-9643-7872-aa12-98326dcf25e7
2026-10-18 01:20:05 +02:00

39 lines
2.7 KiB
Markdown

# Authenticated Go decision client
`pkg/decisionpep` is the producer-owned consumer of the normal signed Check
contract. It sends one current request with a fresh nonce, validates the unchanged
producer signature and exact request/policy/registry/caller/lifetime bindings, and
returns only a verified ALLOW without unimplemented obligations. It renders no
policy and grants no protected effect itself. It requires the explicit
`lossless-json-v1` wire profile and signed `standalone/lossless-json-v1` provenance;
legacy callers keep their original numeric projection. Purpose-bearing readback
and the separate trusted task-execution profile are not accepted by this client.
The standalone Go 1.24 slice is generated from the same root source with
`make decisionpep-export`. `make decisionpep-check` and the ordinary root Go tests
refuse export drift. The export contains exact API/signature source, one client,
its tests, license and a synthetic-fixture signer. It contains no signer key,
credential, OPA engine, policy evaluator or deployable service. Outer release
provenance pins the actual producer commit and complete export hashes; the
manifest's older API/signature baseline identifies those unchanged contract bytes.
Consumers vendor the generated directory and retain its original module/import
identity through their dependency lock. Independently admitted configuration must
supply the HTTPS endpoint, CA, PDP public keys, policy/registry digests and caller
identity, with only a path to the private rotating caller credential. There is no
usable production admission or default trust in this source example. Do not
bootstrap trust from a response, environment proxy, token contents or discovered
key. Redirects, missing trust and unavailable/expired/unsigned/downgraded decisions
refuse. Caller credentials are read per Check; consumers must also reload their
admission under the owner's revocation and rotation contract.
The Forgejo example keeps the three original groups in PDP policy. Its application
resource tenant and issuer are registry-owned. Verified runtime identity and fresh
UserInfo facts are supplied in request context only by the admitted Forgejo caller;
they are not fictional static subject attributes. The actual Forgejo consumer
independently validates issuer JWT signature, algorithm, type, issuer, audience,
authorized party and lifetime before consulting this PDP. The example registry and
keys used in tests are synthetic. A login callback decision covers that callback;
it does not establish later HTTP/API/Git/SSH, operation/inverse or session
revocation acceptance. Native application admission and complete coverage remain
CUST-WP-0080 / NK-WP-0048-T43 / RAPPS-WP-0016-T09 work.