Controller OIDC — operator configuration
Audience: Platform operators and IdP administrators
Release: v3.8.0
Controller v3.8 replaces Keycloak-specific integration with generic OIDC. User routes and operator WebSockets require Bearer JWTs validated via JWKS discovery. Agent routes (/api/v3/agent/*) keep fog-token auth — OIDC does not apply to field agents.
Auth modes
| Mode | Env | Issuer | Typical use |
|---|---|---|---|
| Embedded | AUTH_MODE=embedded | {CONTROLLER_PUBLIC_URL}/oidc (in-process) | Single-node or HA with mysql/postgres; built-in users and MFA |
| External | AUTH_MODE=external | OIDC_ISSUER_URL (third-party IdP) | Enterprise IdP (Keycloak, Auth0, Okta, Azure AD, …) |
Set CONTROLLER_PUBLIC_URL to the URL clients use to reach Controller (HTTPS in production). Behind a reverse proxy, also set TRUST_PROXY=true so redirects and issuer URLs honor X-Forwarded-* headers.
Development with http://localhost:* requires AUTH_INSECURE_ALLOW_HTTP=true.