brain / docs /security /credentials.md
Leon4gr45's picture
Deploy complete BrainAPI source d15a5889e878
2f1e7ff verified
|
Raw History Blame Contribute Delete
3.93 kB

Administrator, access tokens, and browser sessions

SYSTEM_PAT is the single deployment administrator. A legacy BRAINPAT_TOKEN may temporarily alias it; different values fail startup with SYSTEM_PAT_CONFLICT. Missing production credentials and the old default credential fail closed. Rotate any administrator credential previously shared in chat or exposed in logs.

Brains and Workspaces are resources and contain no new credentials. Administrators issue named scoped credentials through POST /system/access-tokens. Copy the one-time response securely, then use Authorization: Bearer (or compatibility BrainPAT) against the discovered workspace API/Agent/MCP endpoint. Listings contain metadata only. Revocation and expiry also invalidate derived sessions. Deleting/recreating a brain does not reactivate an old token for that name.

Existing Brain PATs temporarily authenticate only their own resource. Run python -m scripts.migrate_legacy_credentials to report migration status without printing secrets. For PostgreSQL, --migrate BRAIN_ID atomically moves a legacy secret into the hash-only registry and removes the plaintext Brain representations. This preserves the existing agent credential; it does not rotate an exposed secret. Issue a new named token, update its agents, then revoke the migrated token via DELETE /system/access-tokens/{id}. Do not automate rotation or deletion of legitimate production credentials. Mongo legacy PATs require operator-managed rotation; the atomic PostgreSQL migration tool intentionally refuses that backend.

The console exchanges its submitted access token for an opaque Redis session. Cookies are HttpOnly, Secure, SameSite=Strict, host-only, and expire after eight hours by default (CONSOLE_SESSION_TTL_SECONDS, bounded to 5 minutes–24 hours). Use HTTPS for browser access, including local integration. Cookie-authenticated mutations require the session CSRF value in X-CSRF-Token. Direct token requests do not use CSRF. Session and OAuth records retain principal references, never the submitted administrator or workspace token. OAuth sessions from older releases must be reauthorized because their plaintext credential mapping is no longer read.

Canonical routes are POST /system/brains, POST /system/workspaces, GET /brains/{slug}/agent/capabilities, and the workspace Native/Agent OpenAPI URLs. /meta/login-info is deprecated; use /auth/me. Do not guess /brains, /agent/capabilities, or workspace /api/meta/login-info aliases.

Runtime release gates

The default trace sink is TRACE_MODE=log; disabled disables traces and queue is an explicit opt-in for a consumer. Queue saturation is bounded and warnings are limited to once per minute with an accumulated drop count. The HF monitor checks configured PostgreSQL, Redis, and Ollama only. Logs and trace payloads use shared credential/header/URL redaction.

/health exposes persistence.mode, root, and production_ready. A durable root is an operator-provided persistent mount (/data by default, or BRAINAPI_DURABLE_ROOT). Merely creating a directory on ephemeral storage does not make it durable: operators must attach an actual durable volume. With no root, production startup requires ALLOW_EPHEMERAL_STORAGE=true for staging or recovery; this override never grants production GO. An explicitly configured PERSISTENCE_MODE must agree with detection.

New PostgreSQL clusters use UTF-8 and SCRAM host authentication with local peer authentication. Existing clusters are retained unchanged; audit/upgrade their encoding and authentication separately without destructive initialization. The Celery worker runs as appuser. MCP 1.28's upstream Settings.lifespan forward reference is rebuilt after importing FastMCP; no warning suppression is installed. The existing Starlette httpx TestClient deprecation is unrelated and remains visible in test results.