Web interfaces
Web
Le Gateway sert une petite Control UI dans le navigateur (Vite + Lit) depuis le même port que le WebSocket du Gateway :
- par défaut :
http://<host>:18789/ - avec
gateway.tls.enabled: true:https://<host>:18789/ - préfixe facultatif : définissez
gateway.controlUi.basePath(par ex./openclaw)
Les fonctionnalités se trouvent dans Control UI. Le reste de cette page se concentre sur les modes de liaison, la sécurité et les surfaces exposées au Web.
Webhooks
Lorsque hooks.enabled=true, le Gateway expose également un petit point de terminaison webhook sur le même serveur HTTP.
Consultez Configuration du Gateway → hooks pour l’authentification et les charges utiles.
RPC HTTP d’administration
Le RPC HTTP d’administration expose certaines méthodes du plan de contrôle du Gateway à POST /api/v1/admin/rpc.
Il est désactivé par défaut et n’est enregistré que lorsque le plugin admin-http-rpc est activé.
Consultez RPC HTTP d’administration pour le modèle d’authentification, les méthodes autorisées et la comparaison avec WebSocket.
Configuration (activée par défaut)
La Control UI est activée par défaut lorsque les ressources sont présentes (dist/control-ui).
Vous pouvez la contrôler via la configuration :
{ gateway: { controlUi: { enabled: true, basePath: "/openclaw" }, // basePath facultatif },}Accès Tailscale
Serve intégré (recommandé)
Gardez le Gateway sur local loopback et laissez Tailscale Serve le mandater :
{ gateway: { bind: "loopback", tailscale: { mode: "serve" }, },}Démarrez ensuite le Gateway :
openclaw gatewayOuvrez :
https://<magicdns>/(ou votregateway.controlUi.basePathconfiguré)
Liaison Tailnet + jeton
{ gateway: { bind: "tailnet", controlUi: { enabled: true }, auth: { mode: "token", token: "your-token" }, },}Démarrez ensuite le Gateway (cet exemple non-loopback utilise une authentification par jeton à secret partagé) :
openclaw gatewayOuvrez :
http://<tailscale-ip>:18789/(ou votregateway.controlUi.basePathconfiguré)
Internet public (Funnel)
{ gateway: { bind: "loopback", tailscale: { mode: "funnel" }, auth: { mode: "password" }, // ou OPENCLAW_GATEWAY_PASSWORD },}Notes de sécurité
- L’authentification du Gateway est requise par défaut (jeton, mot de passe, proxy de confiance ou en-têtes d’identité Tailscale Serve lorsqu’ils sont activés).
- Les liaisons non-loopback nécessitent toujours l’authentification du Gateway. En pratique, cela signifie une authentification par jeton/mot de passe ou un proxy inverse sensible à l’identité avec
gateway.auth.mode: "trusted-proxy". - L’assistant crée par défaut une authentification à secret partagé et génère généralement un jeton de Gateway (même sur local loopback).
- En mode secret partagé, l’UI envoie
connect.params.auth.tokenouconnect.params.auth.password. - Lorsque
gateway.tls.enabled: true, les assistants locaux de tableau de bord et d’état affichent des URL de tableau de bordhttps://et des URL WebSocketwss://. - Dans les modes porteurs d’identité tels que Tailscale Serve ou
trusted-proxy, la vérification d’authentification WebSocket est satisfaite à partir des en-têtes de requête à la place. - Pour les déploiements publics non-loopback de la Control UI, définissez explicitement
gateway.controlUi.allowedOrigins(origines complètes). Les chargements LAN/Tailnet privés de même origine sont acceptés pour local loopback, RFC1918/link-local,.local,.ts.netet les hôtes CGNAT Tailscale. gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=trueactive le mode de repli d’origine via l’en-tête Host, mais constitue un abaissement dangereux du niveau de sécurité.- Avec Serve, les en-têtes d’identité Tailscale peuvent satisfaire l’authentification Control UI/WebSocket
lorsque
gateway.auth.allowTailscalevauttrue(aucun jeton/mot de passe requis). Les points de terminaison d’API HTTP n’utilisent pas ces en-têtes d’identité Tailscale ; ils suivent plutôt le mode d’authentification HTTP normal du Gateway. Définissezgateway.auth.allowTailscale: falsepour exiger des identifiants explicites. Consultez Tailscale et Sécurité. Ce flux sans jeton suppose que l’hôte du Gateway est fiable. gateway.tailscale.mode: "funnel"nécessitegateway.auth.mode: "password"(mot de passe partagé).
Construire l’UI
Le Gateway sert les fichiers statiques depuis dist/control-ui. Construisez-les avec :
pnpm ui:build