LearnNewsExamplesServices
Frontmatter
id10774
titleDocument trustProxyIdentity threat model + operator config in SharedDeployment.md
stateClosed
labels
documentationenhancementai
assigneesneo-opus-4-7
createdAtMay 5, 2026, 8:44 PM
updatedAtMay 7, 2026, 2:23 AM
githubUrlhttps://github.com/neomjs/neo/issues/10774
authorneo-opus-4-7
commentsCount2
parentIssue10721
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtMay 7, 2026, 2:23 AM

Document trustProxyIdentity threat model + operator config in SharedDeployment.md

Closeddocumentationenhancementai
neo-opus-4-7
neo-opus-4-7 commented on May 5, 2026, 8:44 PM

Context

Retroactive ticket for the doc-work that should have been filed BEFORE PR #10769 opened. The doc PR shipped in tight coordination with PR #10768 (the code-substrate it documents) but I skipped the ticket-create step under self-imposed time pressure — workflow discipline lapse.

The Problem

PR #10768 (feat(auth): add proxy identity injection via X-PREFERRED-USERNAME) ships the trust-boundary code for auth.trustProxyIdentity config + proxy-header reading + OIDC-precedence guard + source-tag propagation. The code is correct, but operators deploying the partner-trial topology need explicit documentation of the load-bearing operational prerequisite: the fronting proxy MUST strip client-set values of X-PREFERRED-USERNAME (and oauth2-proxy variants) before forwarding upstream, set them itself based on its own validated auth state, and prevent direct MC ingress.

Without this doc, operators could enable trustProxyIdentity=true without understanding the proxy-side prerequisite — silent security hole under any default-allow-headers reverse proxy.

The Architectural Reality

  • learn/agentos/SharedDeployment.md — the operator-facing deployment profile; auth section was missing
  • PR #10768 changes: auth.trustProxyIdentity config field + TransportService.mjs proxy-header reading branch
  • Server.mjs#buildRequestContext:259 — propagates source: 'oidc' | 'proxy-header' into the request context

The Fix

Add an ## Authentication section to SharedDeployment.md between ## Configuration and ## Healthcheck Verification. Cover:

  • OIDC vs proxy-identity injection paths
  • trustProxyIdentity env-var + config substrate
  • The 3 proxy prerequisites (strip client-set headers; set them itself based on validated auth; prevent direct MC ingress)
  • Both header conventions checked (x-preferred-username canonical + x-auth-request-preferred-username oauth2-proxy variant)
  • Source-tag observability (source: 'oidc' vs 'proxy-header' vs empty for local-dev)
  • Fallback discipline: when any of the 3 proxy prerequisites is uncertain, leave trustProxyIdentity=false

Acceptance Criteria

  • ## Authentication section added to SharedDeployment.md
  • Threat-model statement explicit (3 proxy prerequisites)
  • Both header conventions documented
  • Source-tag observability documented
  • OIDC precedence semantics explained
  • Pairs structurally with embedding-provider documentation (parallel-track shape)

Out of Scope

  • Symmetric healthcheck providers.auth block (separate follow-up #10770)
  • Unit tests for proxy-identity injection (separate follow-up #10772)
  • Full OIDC-issuer provisioning steps (operator-side concern; out of MVP scope)

Related

  • Code PR: #10768 (Resolves #10727 — the trust-boundary code substrate)
  • Doc PR: #10769 (resolves THIS ticket — already merged 2026-05-05, retroactively-filed ticket)
  • Sibling parallel-track: PR #10767 (feat(memory-core): surface active embedding provider in healthcheck (#10723))
  • Parent epic: #10721 (Shared deployment MVP completeness gaps)

Note: This ticket is filed RETROACTIVELY post-merge of PR #10769. Filed for graph-linkage cleanliness — the doc work was real but the ticket-then-PR ordering was skipped under self-imposed time pressure (per pull-request-workflow §0 discipline lapse). @tobiu calibration 2026-05-05: workflow-discipline > velocity even under operator-stated importance contexts.

Origin Session ID: 23b9cbcd-4938-4a46-b21a-0d48dd12e7e7