You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Gateway/auth: allow one trusted device-token retry on shared-token mismatch with recovery hints to prevent reconnect churn during token drift. (#42507) Thanks @joshavant.
86
86
- Channels/allowlists: remove stale matcher caching so same-array allowlist edits and wildcard replacements take effect immediately, with regression coverage for in-place mutation cases.
87
-
- Gateway/auth: fail closed when local `gateway.auth.*` SecretRefs are configured but unavailable, instead of silently falling back to `gateway.remote.*` credentials in local mode. Thanks @tdjackey.
87
+
- Gateway/auth: fail closed when local `gateway.auth.*` SecretRefs are configured but unavailable, instead of silently falling back to `gateway.remote.*` credentials in local mode. (#42672) Thanks @joshavant.
88
88
- Sandbox/fs bridge: pin staged writes to verified parent directories so temporary write files cannot materialize outside the allowed mount before atomic replace. Thanks @tdjackey.
89
89
- Commands/config writes: enforce `configWrites` against both the originating account and the targeted account scope for `/config` and config-backed `/allowlist` edits, blocking sibling-account mutations while preserving gateway `operator.admin` flows. Thanks @tdjackey for reporting.
Gateway auth for this handler uses the same shared credential resolution contract as other Gateway clients:
947
947
948
948
- env-first local auth (`OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD` then `gateway.auth.*`)
949
-
- in local mode, `gateway.remote.*` can be used as fallback when `gateway.auth.*` is unset
949
+
- in local mode, `gateway.remote.*` can be used as fallback only when `gateway.auth.*` is unset; configured-but-unresolved local SecretRefs fail closed
950
950
- remote-mode support via `gateway.remote.*` when applicable
951
951
- URL overrides are override-safe: CLI overrides do not reuse implicit credentials, and env overrides use env credentials only
Copy file name to clipboardExpand all lines: docs/cli/acp.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -273,7 +273,7 @@ Security note:
273
273
-`--token` and `--password` can be visible in local process listings on some systems.
274
274
- Prefer `--token-file`/`--password-file` or environment variables (`OPENCLAW_GATEWAY_TOKEN`, `OPENCLAW_GATEWAY_PASSWORD`).
275
275
- Gateway auth resolution follows the shared contract used by other Gateway clients:
276
-
- local mode: env (`OPENCLAW_GATEWAY_*`) -> `gateway.auth.*` -> `gateway.remote.*` fallback when `gateway.auth.*` is unset
276
+
- local mode: env (`OPENCLAW_GATEWAY_*`) -> `gateway.auth.*` -> `gateway.remote.*` fallback only when `gateway.auth.*` is unset (configured-but-unresolved local SecretRefs fail closed)
277
277
- remote mode: `gateway.remote.*` with env/config fallback per remote precedence rules
278
278
-`--url` is override-safe and does not reuse implicit config/env credentials; pass explicit `--token`/`--password` (or file variants)
279
279
- ACP runtime backend child processes receive `OPENCLAW_SHELL=acp`, which can be used for context-specific shell/profile rules.
Copy file name to clipboardExpand all lines: docs/cli/index.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1018,7 +1018,7 @@ Subcommands:
1018
1018
1019
1019
Auth notes:
1020
1020
1021
-
-`node` resolves gateway auth from env/config (no `--token`/`--password` flags): `OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD`, then `gateway.auth.*`, with remote-mode support via`gateway.remote.*`.
1021
+
-`node` resolves gateway auth from env/config (no `--token`/`--password` flags): `OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD`, then `gateway.auth.*`. In local mode, node host intentionally ignores `gateway.remote.*`; in `gateway.mode=remote`,`gateway.remote.*` participates per remote precedence rules.
1022
1022
- Legacy `CLAWDBOT_GATEWAY_*` env vars are intentionally ignored for node-host auth resolution.
Copy file name to clipboardExpand all lines: docs/cli/node.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -64,7 +64,8 @@ Options:
64
64
65
65
-`OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD` are checked first.
66
66
- Then local config fallback: `gateway.auth.token` / `gateway.auth.password`.
67
-
- In local mode, `gateway.remote.token` / `gateway.remote.password` are also eligible as fallback when `gateway.auth.*` is unset.
67
+
- In local mode, node host intentionally does not inherit `gateway.remote.token` / `gateway.remote.password`.
68
+
- If `gateway.auth.token` / `gateway.auth.password` is explicitly configured via SecretRef and unresolved, node auth resolution fails closed (no remote fallback masking).
68
69
- In `gateway.mode=remote`, remote client fields (`gateway.remote.token` / `gateway.remote.password`) are also eligible per remote precedence rules.
69
70
- Legacy `CLAWDBOT_GATEWAY_*` env vars are ignored for node host auth resolution.
Copy file name to clipboardExpand all lines: docs/gateway/configuration-reference.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2470,7 +2470,8 @@ See [Plugins](/tools/plugin).
2470
2470
-`remote.transport`: `ssh` (default) or `direct` (ws/wss). For `direct`, `remote.url` must be `ws://` or `wss://`.
2471
2471
-`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: client-side break-glass override that allows plaintext `ws://` to trusted private-network IPs; default remains loopback-only for plaintext.
2472
2472
-`gateway.remote.token` / `.password` are remote-client credential fields. They do not configure gateway auth by themselves.
2473
-
- Local gateway call paths can use `gateway.remote.*` as fallback when `gateway.auth.*` is unset.
2473
+
- Local gateway call paths can use `gateway.remote.*` as fallback only when `gateway.auth.*` is unset.
2474
+
- If `gateway.auth.token` / `gateway.auth.password` is explicitly configured via SecretRef and unresolved, resolution fails closed (no remote fallback masking).
2474
2475
-`trustedProxies`: reverse proxy IPs that terminate TLS. Only list proxies you control.
2475
2476
-`allowRealIpFallback`: when `true`, the gateway accepts `X-Real-IP` if `X-Forwarded-For` is missing. Default `false` for fail-closed behavior.
2476
2477
-`gateway.tools.deny`: extra tool names blocked for HTTP `POST /tools/invoke` (extends default deny list).
Copy file name to clipboardExpand all lines: docs/gateway/remote.md
+6-4Lines changed: 6 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -103,18 +103,19 @@ When the gateway is loopback-only, keep the URL at `ws://127.0.0.1:18789` and op
103
103
104
104
## Credential precedence
105
105
106
-
Gateway credential resolution follows one shared contract across call/probe/status paths, Discord exec-approval monitoring, and node-host connections:
106
+
Gateway credential resolution follows one shared contract across call/probe/status paths and Discord exec-approval monitoring. Node-host uses the same base contract with one local-mode exception (it intentionally ignores `gateway.remote.*`):
107
107
108
108
- Explicit credentials (`--token`, `--password`, or tool `gatewayToken`) always win on call paths that accept explicit auth.
109
109
- URL override safety:
110
110
- CLI URL overrides (`--url`) never reuse implicit config/env credentials.
111
111
- Env URL overrides (`OPENCLAW_GATEWAY_URL`) may use env credentials only (`OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD`).
- token: `OPENCLAW_GATEWAY_TOKEN` -> `gateway.auth.token` -> `gateway.remote.token` (remote fallback applies only when local auth token input is unset)
114
+
- password: `OPENCLAW_GATEWAY_PASSWORD` -> `gateway.auth.password` -> `gateway.remote.password` (remote fallback applies only when local auth password input is unset)
- Node-host local-mode exception: `gateway.remote.token` / `gateway.remote.password` are ignored.
118
119
- Remote probe/status token checks are strict by default: they use `gateway.remote.token` only (no local token fallback) when targeting remote mode.
119
120
- Legacy `CLAWDBOT_GATEWAY_*` env vars are only used by compatibility call paths; probe/status/auth resolution uses `OPENCLAW_GATEWAY_*` only.
120
121
@@ -140,7 +141,8 @@ Short version: **keep the Gateway loopback-only** unless you’re sure you need
140
141
set `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` on the client process as break-glass.
141
142
-**Non-loopback binds** (`lan`/`tailnet`/`custom`, or `auto` when loopback is unavailable) must use auth tokens/passwords.
142
143
-`gateway.remote.token` / `.password` are client credential sources. They do **not** configure server auth by themselves.
143
-
- Local call paths can use `gateway.remote.*` as fallback when `gateway.auth.*` is unset.
144
+
- Local call paths can use `gateway.remote.*` as fallback only when `gateway.auth.*` is unset.
145
+
- If `gateway.auth.token` / `gateway.auth.password` is explicitly configured via SecretRef and unresolved, resolution fails closed (no remote fallback masking).
144
146
-`gateway.remote.tlsFingerprint` pins the remote TLS cert when using `wss://`.
145
147
-**Tailscale Serve** can authenticate Control UI/WebSocket traffic via identity
146
148
headers when `gateway.auth.allowTailscale: true`; HTTP API endpoints still
Copy file name to clipboardExpand all lines: docs/gateway/secrets.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -41,13 +41,13 @@ Examples of inactive surfaces:
41
41
- Web search provider-specific keys that are not selected by `tools.web.search.provider`.
42
42
In auto mode (provider unset), keys are consulted by precedence for provider auto-detection until one resolves.
43
43
After selection, non-selected provider keys are treated as inactive until selected.
44
-
-`gateway.remote.token` / `gateway.remote.password` SecretRefs are active (when `gateway.remote.enabled` is not `false`) if one of these is true:
44
+
-`gateway.remote.token` / `gateway.remote.password` SecretRefs are active if one of these is true:
45
45
-`gateway.mode=remote`
46
46
-`gateway.remote.url` is configured
47
47
-`gateway.tailscale.mode` is `serve` or `funnel`
48
-
In local mode without those remote surfaces:
49
-
-`gateway.remote.token` is active when token auth can win and no env/auth token is configured.
50
-
-`gateway.remote.password` is active only when password auth can win and no env/auth password is configured.
48
+
- In local mode without those remote surfaces:
49
+
-`gateway.remote.token` is active when token auth can win and no env/auth token is configured.
50
+
-`gateway.remote.password` is active only when password auth can win and no env/auth password is configured.
51
51
-`gateway.auth.token` SecretRef is inactive for startup auth resolution when `OPENCLAW_GATEWAY_TOKEN` (or `CLAWDBOT_GATEWAY_TOKEN`) is set, because env token input wins for that runtime.
0 commit comments