OpenClaw EnterpriseDOCSGitHub

OIDC controller settings

auth.oidc.enabled enables generic OpenID Connect sign-in for the API. It requires the single-controller external sign-in profile and a recovery account. Use Enable OIDC sign-in for setup.

Variable Helm value Behavior
OCC_AUTH_OIDC_ISSUER auth.oidc.issuer The exact iss; with the client ID it determines the provider instance.
OCC_AUTH_OIDC_AUTHORIZATION_URL, _TOKEN_URL, _JWKS_URL auth.oidc.authorizationUrl, tokenUrl, jwksUrl https: on 443 on the issuer's DNS host, no userinfo, query or fragment. Never discovered.
OCC_AUTH_OIDC_CLIENT_ID, OCC_AUTH_OIDC_CLIENT_SECRET auth.oidc Secret keys Read from the dedicated auth.oidc.secretName Secret. All required values or none.
OCC_AUTH_OIDC_TOKEN_AUTH auth.oidc.tokenAuth client_secret_post (default, not rendered) or client_secret_basic.
OCC_AUTH_OIDC_DISPLAY_NAME auth.oidc.displayName Optional Console label, 1–40 printable characters.

OCC_AUTH_OIDC_ENROLLMENT (Helm auth.oidc.enrollment) accepts the JSON OIDC enrollment policy. The installation profile uses controlPlane.oidc.enrollment. Absence requires explicit identity attachment and disables automatic account creation.

With auth.oidc.enabled, the chart adds the API-only egress policy openclaw-enterprise-api-oidc-login-egress on TCP 443. Empty auth.oidc.egressCidrs allows any address except link-local 169.254.0.0/16. The port is the destination Pod's port; an IdP inside the cluster on another target port needs its own egress policy. Rendering rejects invalid endpoint settings, a Secret shared with Google or another chart credential Secret, or an HTTP base URL. OIDC supports native Agent access.

auth.oidc.caSecretName and auth.oidc.caSecretKey optionally select a public PEM CA bundle from a Secret in the release namespace. Both default to empty; set both or neither, and only while OIDC is enabled. The CA Secret must not be a credential Secret the chart reads or database.caSecretName; it may share a public trust bundle Secret with gatewayRouting.caSecretName or repositoryCredentials.publicCaSecretName. Helm rejects invalid names, keys, shared credential Secrets and partial configuration. Required Secret projection and the assemble-api-ca init container gate API startup. Each input must contain only parseable PEM CA certificates, at most 1 MiB, without private keys or leaf certificates. This also applies to a selected Gateway CA bundle when OIDC CA trust is configured.

This opt-in also requires a separately selected database.caSecretName, distinct from the IdP CA Secret. The application URL must name the database by DNS hostname and use sslmode=verify-full and sslrootcert=<database.caMountPath>/<database.caKey>; mounting the Secret alone is insufficient. IP literal and Unix socket hosts are refused: the PostgreSQL client sends no TLS server name for an IP host, so Node would check the certificate against localhost instead of the address. Preserve the database's approved roots in that certificate-only PEM bundle (at most 1 MiB), including public roots if needed. Do not add IdP roots unless they were independently approved for the database.

Before loading the server, the API checks its actual OCC_DATABASE_URL with the installed PostgreSQL client parser and refuses absent, unreadable, empty or invalid CA material, ineffective TLS settings, IP or socket hosts (including a host parameter), duplicate URL parameters and nested connection strings. Errors omit the URL and credentials. Password and workload-identity pools retain this explicit CA; database TLS does not inherit the added IdP roots or Node's default roots. This checks local configuration at each API process start, not database reachability. Change database CA material only during stopped maintenance, then replace the Pod.

The init container combines the IdP bundle with the Gateway CA, when selected, in a memory volume with a 4 MiB size limit. The API reads it through NODE_EXTRA_CA_CERTS, extending Node's public roots process-wide for API clients using default trust, including token/JWKS requests. Clients with an explicit CA store keep that store. IdP roots are not added to workers, Jobs or Agents: the chart also sets OCC_GATEWAY_CA_PATH to the Gateway-only bundle (empty without one), and Harness node enrollment reads that instead of the combined bundle. An external Gateway issuer without a custom CA contributes no extra roots. With no OIDC CA values, existing chart trust wiring is unchanged. TLS verification and OIDC URL restrictions are unchanged.

Secret name/key changes replace the API Pod. Secret content changes require explicit API Pod replacement, including changes to a combined Gateway CA: assembly and Node trust loading happen at startup, without hot reload. Restarting only the API container keeps the init snapshot. The single API replica is interrupted during replacement. See private CA setup and rotation.

Search documentation