mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-05 22:32:12 +00:00
docs: refresh gateway auth handshake refs
This commit is contained in:
@@ -82,8 +82,14 @@ sequenceDiagram
|
||||
- After handshake:
|
||||
- Requests: `{type:"req", id, method, params}` → `{type:"res", id, ok, payload|error}`
|
||||
- Events: `{type:"event", event, payload, seq?, stateVersion?}`
|
||||
- If `OPENCLAW_GATEWAY_TOKEN` (or `--token`) is set, `connect.params.auth.token`
|
||||
must match or the socket closes.
|
||||
- Shared-secret auth uses `connect.params.auth.token` or
|
||||
`connect.params.auth.password`, depending on the configured gateway auth mode.
|
||||
- Identity-bearing modes such as Tailscale Serve
|
||||
(`gateway.auth.allowTailscale: true`) or non-loopback
|
||||
`gateway.auth.mode: "trusted-proxy"` satisfy auth from request headers
|
||||
instead of `connect.params.auth.*`.
|
||||
- Private-ingress `gateway.auth.mode: "none"` disables shared-secret auth
|
||||
entirely; keep that mode off public/untrusted ingress.
|
||||
- Idempotency keys are required for side‑effecting methods (`send`, `agent`) to
|
||||
safely retry; the server keeps a short‑lived dedupe cache.
|
||||
- Nodes must include `role: "node"` plus caps/commands/permissions in `connect`.
|
||||
|
||||
@@ -45,8 +45,8 @@ Common methods + events:
|
||||
| Category | Examples | Notes |
|
||||
| --------- | --------------------------------------------------------- | ---------------------------------- |
|
||||
| Core | `connect`, `health`, `status` | `connect` must be first |
|
||||
| Messaging | `send`, `poll`, `agent`, `agent.wait` | side-effects need `idempotencyKey` |
|
||||
| Chat | `chat.history`, `chat.send`, `chat.abort`, `chat.inject` | WebChat uses these |
|
||||
| Messaging | `send`, `agent`, `agent.wait`, `system-event` | side-effects need `idempotencyKey` |
|
||||
| Chat | `chat.history`, `chat.send`, `chat.abort` | WebChat uses these |
|
||||
| Sessions | `sessions.list`, `sessions.patch`, `sessions.delete` | session admin |
|
||||
| Nodes | `node.list`, `node.invoke`, `node.pair.*` | Gateway WS + node actions |
|
||||
| Events | `tick`, `presence`, `agent`, `chat`, `health`, `shutdown` | server push |
|
||||
|
||||
@@ -420,8 +420,14 @@ Gateway exposes today.
|
||||
|
||||
## Auth
|
||||
|
||||
- If `OPENCLAW_GATEWAY_TOKEN` (or `--token`) is set, `connect.params.auth.token`
|
||||
must match or the socket is closed.
|
||||
- Shared-secret gateway auth uses `connect.params.auth.token` or
|
||||
`connect.params.auth.password`, depending on the configured auth mode.
|
||||
- Identity-bearing modes such as Tailscale Serve
|
||||
(`gateway.auth.allowTailscale: true`) or non-loopback
|
||||
`gateway.auth.mode: "trusted-proxy"` satisfy the connect auth check from
|
||||
request headers instead of `connect.params.auth.*`.
|
||||
- Private-ingress `gateway.auth.mode: "none"` skips shared-secret connect auth
|
||||
entirely; do not expose that mode on public/untrusted ingress.
|
||||
- After pairing, the Gateway issues a **device token** scoped to the connection
|
||||
role + scopes. It is returned in `hello-ok.auth.deviceToken` and should be
|
||||
persisted by the client for future connects.
|
||||
|
||||
@@ -1455,14 +1455,14 @@ for usage/billing and raise limits as needed.
|
||||
- `gateway.remote.token` / `.password` do **not** enable local gateway auth by themselves.
|
||||
- Local call paths can use `gateway.remote.*` as fallback only when `gateway.auth.*` is unset.
|
||||
- If `gateway.auth.token` / `gateway.auth.password` is explicitly configured via SecretRef and unresolved, resolution fails closed (no remote fallback masking).
|
||||
- The Control UI authenticates via `connect.params.auth.token` (stored in app/UI settings). Avoid putting tokens in URLs.
|
||||
- Shared-secret Control UI setups authenticate via `connect.params.auth.token` or `connect.params.auth.password` (stored in app/UI settings). Identity-bearing modes such as Tailscale Serve or `trusted-proxy` use request headers instead. Avoid putting shared secrets in URLs.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Why do I need a token on localhost now?">
|
||||
OpenClaw enforces token auth by default, including loopback. If no token is configured, gateway startup auto-generates one and saves it to `gateway.auth.token`, so **local WS clients must authenticate**. This blocks other local processes from calling the Gateway.
|
||||
OpenClaw enforces gateway auth by default, including loopback. In the normal default path that means token auth: if no explicit auth path is configured, gateway startup resolves to token mode and auto-generates one, saving it to `gateway.auth.token`, so **local WS clients must authenticate**. This blocks other local processes from calling the Gateway.
|
||||
|
||||
If you **really** want open loopback, set `gateway.auth.mode: "none"` explicitly in your config. Doctor can generate a token for you any time: `openclaw doctor --generate-gateway-token`.
|
||||
If you prefer a different auth path, you can explicitly choose password mode (or, for non-loopback identity-aware reverse proxies, `trusted-proxy`). If you **really** want open loopback, set `gateway.auth.mode: "none"` explicitly in your config. Doctor can generate a token for you any time: `openclaw doctor --generate-gateway-token`.
|
||||
|
||||
</Accordion>
|
||||
|
||||
|
||||
@@ -98,7 +98,10 @@ Open:
|
||||
- Gateway auth is required by default (token, password, trusted-proxy, or Tailscale Serve identity headers when enabled).
|
||||
- Non-loopback binds still **require** gateway auth. In practice that means token/password auth or an identity-aware reverse proxy with `gateway.auth.mode: "trusted-proxy"`.
|
||||
- The wizard generates a gateway token by default (even on loopback).
|
||||
- The UI sends `connect.params.auth.token` or `connect.params.auth.password`.
|
||||
- In shared-secret mode, the UI sends `connect.params.auth.token` or
|
||||
`connect.params.auth.password`.
|
||||
- In identity-bearing modes such as Tailscale Serve or `trusted-proxy`, the
|
||||
WebSocket auth check is satisfied from request headers instead.
|
||||
- For non-loopback Control UI deployments, set `gateway.controlUi.allowedOrigins`
|
||||
explicitly (full origins). Without it, gateway startup is refused by default.
|
||||
- `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true` enables
|
||||
|
||||
Reference in New Issue
Block a user