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
- macOS/LaunchAgent install: tighten LaunchAgent directory and plist permissions during install so launchd bootstrap does not fail when the target home path or generated plist inherited group/world-writable modes.
14
-
- Gateway/Control UI: keep dashboard auth tokens in session-scoped browser storage so same-tab refreshes preserve remote token auth without restoring long-lived localStorage token persistence.
14
+
- Gateway/Control UI: keep dashboard auth tokens in session-scoped browser storage so same-tab refreshes preserve remote token auth without restoring long-lived localStorage token persistence, while scoping tokens to the selected gateway URL and fragment-only bootstrap flow. (#40892) thanks @velvet-shark.
Copy file name to clipboardExpand all lines: docs/help/faq.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
@@ -2504,7 +2504,7 @@ Your gateway is running with auth enabled (`gateway.auth.*`), but the UI is not
2504
2504
2505
2505
Facts (from code):
2506
2506
2507
-
- The Control UI keeps the token in `sessionStorage` for the current browser tab session, so same-tab refreshes keep working without restoring long-lived localStorage token persistence.
2507
+
- The Control UI keeps the token in `sessionStorage` for the current browser tab session and selected gateway URL, so same-tab refreshes keep working without restoring long-lived localStorage token persistence.
-`gatewayUrl` is stored in localStorage after load and removed from the URL.
240
-
-`token` is stored in sessionStorage for the current browser tab session and stripped from the URL; it is not stored in localStorage.
240
+
-`token` is imported from the URL fragment, stored in sessionStorage for the current browser tab session and selected gateway URL, and stripped from the URL; it is not stored in localStorage.
241
241
-`password` is kept in memory only.
242
242
- When `gatewayUrl` is set, the UI does not fall back to config or environment credentials.
243
243
Provide `token` (or `password`) explicitly. Missing explicit credentials is an error.
Copy file name to clipboardExpand all lines: docs/web/dashboard.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,7 +25,7 @@ Authentication is enforced at the WebSocket handshake via `connect.params.auth`
25
25
26
26
Security note: the Control UI is an **admin surface** (chat, config, exec approvals).
27
27
Do not expose it publicly. The UI keeps dashboard URL tokens in sessionStorage
28
-
for the current browser tab session and strips them from the URL after load.
28
+
for the current browser tab session and selected gateway URL, and strips them from the URL after load.
29
29
Prefer localhost, Tailscale Serve, or an SSH tunnel.
30
30
31
31
## Fast path (recommended)
@@ -37,7 +37,7 @@ Prefer localhost, Tailscale Serve, or an SSH tunnel.
37
37
## Token basics (local vs remote)
38
38
39
39
-**Localhost**: open `http://127.0.0.1:18789/`.
40
-
-**Token source**: `gateway.auth.token` (or `OPENCLAW_GATEWAY_TOKEN`); `openclaw dashboard` can pass it via URL fragment for one-time bootstrap, and the Control UI keeps it in sessionStorage for the current browser tab session instead of localStorage.
40
+
-**Token source**: `gateway.auth.token` (or `OPENCLAW_GATEWAY_TOKEN`); `openclaw dashboard` can pass it via URL fragment for one-time bootstrap, and the Control UI keeps it in sessionStorage for the current browser tab session and selected gateway URL instead of localStorage.
41
41
- If `gateway.auth.token` is SecretRef-managed, `openclaw dashboard` prints/copies/opens a non-tokenized URL by design. This avoids exposing externally managed tokens in shell logs, clipboard history, or browser-launch arguments.
42
42
- If `gateway.auth.token` is configured as a SecretRef and is unresolved in your current shell, `openclaw dashboard` still prints a non-tokenized URL plus actionable auth setup guidance.
43
43
-**Not localhost**: use Tailscale Serve (tokenless for Control UI/WebSocket if `gateway.auth.allowTailscale: true`, assumes trusted gateway host; HTTP APIs still need token/password), tailnet bind with a token, or an SSH tunnel. See [Web surfaces](/web).
0 commit comments