Files
browser/platform/protocol/auth-contracts.md
T

2.7 KiB

Authentication and Service Identity Contracts

Platform bearer sessions

  • Login and first-user registration issue a random bearer token with an eight-hour expiry.
  • Strict production HTTP routes deliver the session through an HttpOnly, SameSite=Strict cookie and omit it from JSON. X-Auth-Token-Response: bearer is an explicit CLI compatibility mode.
  • Durable stores keep only AuthSessionRecord.tokenHash, owner, generation, status, and lifecycle timestamps.
  • Logout and rotation set status=revoked and revokedAt; rotation issues a distinct generation.
  • Missing, unknown, expired, revoked, or disabled-user sessions return a safe 401 unauthorized error.

Authorization roles

  • platform-admin: user/provider/plugin installation and state, Run endpoint administration, platform metrics, and global internal resource creation.
  • server owner: server membership, runtime binding changes, destructive/archive operations, and all visible server actions.
  • server administrator: non-owner operational access to assigned server resources, but no owner-only membership or secret/key rotation.
  • Run service: control/job/log/artifact channels for its current endpoint session; it cannot use browser bearer authority.

Job, log, artifact, runtime-binding, distribution, and plugin-bridge services resolve the target server and repeat ownership checks independently from the HTTP router.

Run signed envelope

Component-authenticated Run hello responses advertise signed-envelope.v1.required. Subsequent HTTP channel calls carry X-Run-Endpoint, X-Run-Timestamp (Unix seconds), X-Run-Nonce, and X-Run-Signature (hex HMAC-SHA256).

The canonical payload is METHOD + "\n" + PATH + "\n" + TIMESTAMP + "\n" + NONCE + "\n" + SHA256(BODY). The current Run session token is the HMAC key. The platform rejects endpoint mismatch, invalid signatures, timestamps outside a five-minute window, expired/revoked sessions, and replayed nonces. Legacy non-component local test sessions remain an explicit compatibility path and advertise the envelope as optional.

Secret boundary

Platform snapshots may contain password verifiers, bearer/Run token hashes, encrypted component-key ciphertext, fingerprints, generations, and scoped secret:///vault:// references. They never contain raw bearer tokens, raw component keys, provider key values, host paths, or direct sockets. Browser DTOs expose secret presence/configured flags only.

Component-key ciphertext uses an injectable AES-GCM envelope derived from PLATFORM_SECRET_ENVELOPE_KEY; the built-in key is a disposable-development fallback only. This boundary is not a production KMS/vault. External key wrapping, KMS/HSM integration, multi-node replay coordination, envelope-key migration, and secret-value rotation remain deferred risks.