Web interfaces
Web
Der Gateway stellt eine kleine Browser-Control-UI (Vite + Lit) über denselben Port wie der Gateway-WebSocket bereit:
- Standard:
http://<host>:18789/ - mit
gateway.tls.enabled: true:https://<host>:18789/ - optionales Präfix: Legen Sie
gateway.controlUi.basePathfest (z. B./openclaw)
Die Funktionen werden unter Control UI beschrieben. Diese Seite behandelt Bindungsmodi, Sicherheit und weitere webseitige Schnittstellen.
Konfiguration (standardmäßig aktiviert)
Die Control UI ist standardmäßig aktiviert, wenn die Assets vorhanden sind (dist/control-ui):
{ gateway: { controlUi: { enabled: true, basePath: "/openclaw" }, // basePath optional },}Webhooks
Wenn hooks.enabled=true festgelegt ist, stellt der Gateway außerdem einen Webhook-Endpunkt auf demselben HTTP-Server bereit. Informationen zu Authentifizierung und Nutzdaten finden Sie unter hooks in der Referenz zur Gateway-Konfiguration.
Administrator-HTTP-RPC
POST /api/v1/admin/rpc stellt ausgewählte Methoden der Gateway-Steuerungsebene über HTTP bereit. Die Funktion ist standardmäßig deaktiviert und wird nur registriert, wenn das Plugin admin-http-rpc aktiviert ist. Informationen zum Authentifizierungsmodell, zu den zulässigen Methoden und zum Vergleich mit der WebSocket-API finden Sie unter Administrator-HTTP-RPC.
Zugriff über Tailscale
Integriertes Serve (empfohlen)
Belassen Sie den Gateway auf local loopback und lassen Sie ihn durch Tailscale Serve als Proxy weiterleiten:
{ gateway: { bind: "loopback", tailscale: { mode: "serve" }, },}Starten Sie den Gateway:
openclaw gatewayÖffnen Sie https://<magicdns>/ (oder Ihren konfigurierten gateway.controlUi.basePath).
Tailnet-Bindung + Token
{ gateway: { bind: "tailnet", controlUi: { enabled: true }, auth: { mode: "token", token: "your-token" }, },}Starten Sie den Gateway (dieses Beispiel ohne local loopback verwendet die Authentifizierung mit einem Shared-Secret-Token):
openclaw gatewayÖffnen Sie http://<tailscale-ip>:18789/ (oder Ihren konfigurierten gateway.controlUi.basePath).
Öffentliches Internet (Funnel)
{ gateway: { bind: "loopback", tailscale: { mode: "funnel" }, auth: { mode: "password" }, // or OPENCLAW_GATEWAY_PASSWORD },}tailscale.mode: "funnel" erfordert gateway.auth.mode: "password"; sowohl Serve als auch Funnel erfordern gateway.bind: "loopback".
Sicherheitshinweise
- Die Gateway-Authentifizierung ist standardmäßig erforderlich: Token, Passwort, vertrauenswürdiger Proxy oder, sofern aktiviert, Identitätsheader von Tailscale Serve.
- Bindungen außerhalb von local loopback erfordern weiterhin eine Gateway-Authentifizierung: Token-/Passwortauthentifizierung oder einen identitätsbewussten Reverse-Proxy mit
gateway.auth.mode: "trusted-proxy". - Der Onboarding-Assistent erstellt standardmäßig eine Shared-Secret-Authentifizierung und generiert üblicherweise ein Gateway-Token, selbst bei local loopback.
- Im Shared-Secret-Modus sendet die UI während des WebSocket-Handshakes
connect.params.auth.tokenoderconnect.params.auth.password. - Mit
gateway.tls.enabled: truestellen lokale Dashboard-/Status-Hilfsfunktionen URLs mithttps://und WebSocket-URLs mitwss://dar. - In identitätsbasierten Modi (Tailscale Serve,
trusted-proxy) wird die WebSocket-Authentifizierungsprüfung anhand der Anfrageheader statt anhand eines gemeinsamen Geheimnisses erfüllt. - Legen Sie für öffentliche Control-UI-Bereitstellungen außerhalb von local loopback
gateway.controlUi.allowedOriginsexplizit fest (vollständige Ursprünge). Private Ladevorgänge mit demselben Ursprung werden für local loopback, RFC1918-/Link-Local-,.local-,.ts.net- und Tailscale-CGNAT-Hosts auch ohne diese Einstellung akzeptiert. gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback: trueaktiviert den Ursprungs-Fallback über den Host-Header; dies stellt eine gefährliche Herabstufung der Sicherheit dar.- Bei Serve erfüllen Tailscale-Identitätsheader die Authentifizierungsanforderungen der Control UI und des WebSockets, wenn
gateway.auth.allowTailscale: truefestgelegt ist (kein Token oder Passwort erforderlich). HTTP-API-Endpunkte verwenden keine Tailscale-Identitätsheader; sie folgen stets dem normalen HTTP-Authentifizierungsmodus des Gateways. Legen Siegateway.auth.allowTailscale: falsefest, um auch über Serve explizite Anmeldedaten zu verlangen. Dieser tokenlose Ablauf setzt voraus, dass der Gateway-Host selbst vertrauenswürdig ist. Siehe Tailscale und Sicherheit.
Erstellen der UI
Der Gateway stellt statische Dateien aus dist/control-ui bereit:
pnpm ui:build