Auth & OIDC
Email+Passwort out of the box, OIDC-SSO via einer Env-Variable, Personal-Access-Tokens für Management-API und MCP.
Drei Auth-Flächen
Admin-UI → Session-Cookie (Better Auth). Login unter /login, Signup unter /login?mode=signup.
CDN-API → ?token= Query-Parameter. Drei Default-Tokens pro Space: public / preview / private.
Management-API → Authorization: Bearer <sbmgmt_... oder sbmcp_...>. Tokens sind per HMAC at-rest gehasht.
OIDC-SSO aktivieren
OIDC_ISSUER_URL auf einen beliebigen OIDC-konformen IdP setzen (Keycloak, Authentik, Auth0, Okta, Google). Email+Passwort-Login wird automatisch deaktiviert; der IdP wird der einzige Weg hinein.
OIDC_ISSUER_URL=https://auth.example.com/realms/main
OIDC_CLIENT_ID=osstblok
OIDC_CLIENT_SECRET=...
# optional
OIDC_PROVIDER_ID=keycloak
OIDC_DISPLAY_NAME=Company SSO
OIDC_SCOPES=openid,email,profile
OIDC_TRUST_EMAIL=false # opt-in: merge OIDC + email accounts with matching verified emailRollen
Pro Space: admin, editor, viewer. Das useSpaceRole-Composable liefert canEdit / canAdmin / isViewer ans Admin-UI. Jede security-sensitive Mutation landet im append-only Audit-Log (GET /v1/spaces/:spaceId/audit_log).