molecule-core/docs/architecture
Hongming Wang 3d7244ab94 feat(auth): org tokens reach /workspaces/:id/* subroutes + docs
Extends WorkspaceAuth to accept org API tokens as a valid
credential for any workspace sub-route in the org. Previously a
user minting an org token could hit admin-surface endpoints
(/workspaces, /org/import, etc.) but couldn't reach per-workspace
routes like /workspaces/:id/channels — those were gated by
WorkspaceAuth which only knew about workspace-scoped tokens.

Scope matches the explicit product spec: one org API key can
manipulate every workspace in the org. AI agents given a key can
read/write channels, tokens, schedules, secrets, tasks across all
workspaces.

## WorkspaceAuth tier order

  1. ADMIN_TOKEN exact match (break-glass / bootstrap)
  2. Org API token (Validate against org_api_tokens)           NEW
  3. Workspace-scoped token (ValidateToken with :id binding)
  4. Same-origin canvas referer

Org token tier sits above the per-workspace check so a presenter
of an org key doesn't hit the narrower ValidateToken failure path
first. Checked with isSameOriginCanvas path unchanged.

## End-to-end verified

Minted test token via ADMIN_TOKEN, then with that org token:
  - GET /workspaces             → 200 (list all)
  - GET /workspaces/<id>        → 200 (detail, admin-only route)
  - GET /workspaces/<id>/channels → 200 (workspace sub-route)
  - GET /workspaces/<id>/tokens   → 200 (workspace tokens list)
  - GET /workspaces/<bad-uuid>    → 404 workspace not found
                                    (routing still scoped correctly)

## Documentation

  - docs/architecture/org-api-keys.md — design, data model, threat
    model, security properties
  - docs/architecture/org-api-keys-followups.md — 10 tracked
    follow-ups prioritized (role scoping P1, per-workspace binding
    P1, expiry P2, usage metrics P2, WorkOS user_id capture P2,
    rotation webhooks P3, mint-rate limit P3, audit log P2, CLI
    P3, migrate ADMIN_TOKEN to the same table P4)
  - docs/guides/org-api-keys.md — end-user guide (mint via UI,
    use in curl/Python/TS/AI agents, session-vs-key comparison)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 14:11:45 -07:00
..
architecture.md chore: open-source restructure — rename dirs, remove internal files, scrub secrets 2026-04-18 00:24:44 -07:00
canary-release.md feat(canary): rollback-latest script + release-pipeline doc (Phase 4) 2026-04-19 03:37:42 -07:00
database-schema.md initial commit — Molecule AI platform 2026-04-13 11:55:37 -07:00
event-log.md initial commit — Molecule AI platform 2026-04-13 11:55:37 -07:00
memory.md initial commit — Molecule AI platform 2026-04-13 11:55:37 -07:00
molecule-technical-doc.md chore: open-source restructure — rename dirs, remove internal files, scrub secrets 2026-04-18 00:24:44 -07:00
org-api-keys-followups.md feat(auth): org tokens reach /workspaces/:id/* subroutes + docs 2026-04-20 14:11:45 -07:00
org-api-keys.md feat(auth): org tokens reach /workspaces/:id/* subroutes + docs 2026-04-20 14:11:45 -07:00
overview.md fix(docs): update architecture + API reference paths for workspace-server rename 2026-04-18 01:25:21 -07:00
partner-api-keys.md docs: Partner API Keys architecture + Phase 34 plan 2026-04-17 14:07:50 -07:00
provisioner.md initial commit — Molecule AI platform 2026-04-13 11:55:37 -07:00
saas-prod-migration-2026-04-19.md docs: 2026-04-19 SaaS prod migration notes 2026-04-19 02:29:31 -07:00
staging-environment.md docs: staging environment design + Phase 36 plan 2026-04-17 20:37:11 -07:00
technology-choices.md initial commit — Molecule AI platform 2026-04-13 11:55:37 -07:00
tenant-image-upgrades.md chore: open-source preparation — scrub secrets, add community files 2026-04-18 00:10:56 -07:00
wildcard-dns-proxy.md chore: final open-source cleanup — binary, stale paths, private refs 2026-04-18 00:38:55 -07:00
workspace-tiers.md initial commit — Molecule AI platform 2026-04-13 11:55:37 -07:00