Skip to content

Auth modes

rvmc (the research workbench) runs in one of two authentication modes, set by RVMC_AUTH_MODE. The mode decides who the workbench trusts and how much infrastructure you need around it.

local — single-user self-host

Terminal window
RVMC_AUTH_MODE=local rvmc serve
  • One owner, no identity provider. No Authentik, no OIDC, no auth database.
  • The keystone that makes rvmc fork-and-run: clone research-vm-controller, point it at libvirt + your golden storage, start it. Nothing else to stand up.
  • Intended for a researcher on their own machine or a small institution running a single instance.
  • Use this for the self-host quickstart.

forward — multi-tenant (default)

The hardened, production posture used at ZKM:

  • The app trusts the edge: a reverse proxy (Traefik) enforces forward-auth against Authentik (OIDC), plus IP allowlisting where appropriate.
  • The app itself carries no in-app login — every request is authenticated before it arrives.
  • Projects are scoped to groups, so each user sees only their own project’s VMs and tools; the MCP tool endpoints are scoped per project the same way. Access is granted via the project’s registry groups or the convention groups proj-<pid> / proj-<pid>-admin — the convention groups count even when the registry’s stored list is empty, so membership in the Authentik group a provision creates is always enough.
  • Needs the surrounding infrastructure: Traefik + Authentik (and Authentik’s own Postgres/Redis).

This is the right mode for a shared, internet-reachable deployment with several users.

Choosing

localforward
Usersone ownermany, group-scoped
Identity providernoneAuthentik (OIDC)
Extra infranoneTraefik + Authentik (+ its PG/Redis)
Reachabilityyour machine / LANinternet, behind the edge
Setup effortminimalfull stack

Default is forward (safe for a public deployment). Switch to local deliberately for solo use. The scoped-per-project MCP tool surface and the read-only token scope apply in forward; local is a single trusted owner.

Note on the autopsy service

Autopsy runs as its own service and is typically reached by rvmc (or the CLI), not exposed directly to end users. When you expose its API, put it behind the same edge you use for rvmc.