El panel del Gateway es la interfaz de Control UI en el navegador servida en / de forma predeterminada (sobrescríbelo con gateway.controlUi.basePath).
Apertura rápida (Gateway local):
Referencias clave:
La autenticación se aplica en el handshake de WebSocket mediante la ruta de autenticación del gateway configurada:
connect.params.auth.token
connect.params.auth.password
- encabezados de identidad de Tailscale Serve cuando
gateway.auth.allowTailscale: true
- encabezados de identidad de proxy de confianza cuando
gateway.auth.mode: "trusted-proxy"
Consulta gateway.auth en configuración del Gateway.
La Control UI es una superficie de administración (chat, configuración, aprobaciones de exec). No la expongas públicamente. La interfaz conserva los tokens de URL del panel en sessionStorage para la pestaña actual del navegador y la URL del gateway seleccionada, y los elimina de la URL después de cargar. Prefiere localhost, Tailscale Serve o un túnel SSH.
Ruta rápida (recomendado)
- Después del onboarding, la CLI abre automáticamente el panel e imprime un enlace limpio (sin token).
- Reabrir en cualquier momento:
openclaw dashboard (copia el enlace, abre un navegador si es posible, imprime una sugerencia de SSH si está en modo headless).
- Si tanto el portapapeles como la apertura del navegador fallan,
openclaw dashboard aún imprime la URL limpia y te indica que agregues tu token (desde OPENCLAW_GATEWAY_TOKEN o gateway.auth.token) como la clave de fragmento de URL token; nunca imprime el valor del token en los registros.
- Si la interfaz solicita autenticación por secreto compartido, pega el token o la contraseña configurados en la configuración de Control UI.
Conceptos básicos de autenticación (local vs. remoto)
- Localhost: abre
http://127.0.0.1:18789/.
- TLS del Gateway: cuando
gateway.tls.enabled: true, los enlaces de panel/estado usan https:// y los enlaces WebSocket de Control UI usan wss://.
- Fuente del token de secreto compartido:
gateway.auth.token (o OPENCLAW_GATEWAY_TOKEN). openclaw dashboard puede pasarlo mediante fragmento de URL para el arranque de una sola vez; la Control UI lo conserva en sessionStorage para la pestaña actual y la URL del gateway seleccionada, no en localStorage.
- Si
gateway.auth.token está administrado por SecretRef, openclaw dashboard imprime/copia/abre una URL sin token por diseño, para evitar exponer tokens administrados externamente en registros de shell, historial del portapapeles o argumentos de inicio del navegador. Si la referencia no se resuelve en tu shell actual, aún imprime la URL sin token junto con orientación práctica para configurar la autenticación.
- Contraseña de secreto compartido: usa la
gateway.auth.password configurada (o OPENCLAW_GATEWAY_PASSWORD). El panel no conserva contraseñas entre recargas.
- Modos con identidad: Tailscale Serve satisface la autenticación de Control UI/WebSocket mediante encabezados de identidad cuando
gateway.auth.allowTailscale: true; un proxy inverso no local loopback con identidad satisface gateway.auth.mode: "trusted-proxy". Ninguno necesita un secreto compartido pegado para el WebSocket.
- No localhost: usa Tailscale Serve, un enlace de secreto compartido no local loopback, un proxy inverso no local loopback con identidad y
gateway.auth.mode: "trusted-proxy", o un túnel SSH. Las API HTTP siguen usando autenticación por secreto compartido, a menos que ejecutes intencionalmente gateway.auth.mode: "none" de ingreso privado o autenticación HTTP de proxy de confianza. Consulta Superficies web.
Si ves “unauthorized” / 1008
- Confirma que se puede acceder al gateway: local
openclaw status; remoto, túnel SSH ssh -N -L 18789:127.0.0.1:18789 user@gateway-host y luego abre http://127.0.0.1:18789/.
- Para
AUTH_TOKEN_MISMATCH, los clientes pueden hacer un reintento de confianza con un token de dispositivo en caché cuando el gateway devuelve sugerencias de reintento; ese reintento reutiliza los alcances aprobados en caché del token (los llamadores con deviceToken/scopes explícitos conservan el conjunto de alcances solicitado). Si la autenticación sigue fallando después de ese reintento, resuelve manualmente la divergencia del token.
- Para
AUTH_SCOPE_MISMATCH, el token de dispositivo fue reconocido, pero no incluye los alcances solicitados; vuelve a emparejar o aprueba el nuevo conjunto de alcances en lugar de rotar el token compartido del gateway.
- Fuera de esa ruta de reintento, la precedencia de autenticación de conexión es: token/contraseña compartidos explícitos, luego
deviceToken explícito, luego token de dispositivo almacenado, luego token de arranque.
- En la ruta asíncrona de Tailscale Serve, los intentos fallidos para el mismo
{scope, ip} se serializan antes de que el limitador de autenticación fallida los registre, por lo que un segundo reintento incorrecto concurrente ya puede mostrar retry later.
- Para ver pasos de reparación de divergencia de tokens, consulta Lista de verificación de recuperación de divergencia de tokens.
- Recupera o proporciona el secreto compartido desde el host del gateway:
- Token:
openclaw config get gateway.auth.token
- Contraseña: resuelve la
gateway.auth.password configurada o OPENCLAW_GATEWAY_PASSWORD
- Token administrado por SecretRef: resuelve el proveedor de secretos externo, o exporta
OPENCLAW_GATEWAY_TOKEN en este shell y vuelve a ejecutar openclaw dashboard
- Sin secreto compartido configurado:
openclaw doctor --generate-gateway-token
- En la configuración del panel, pega el token o la contraseña en el campo de autenticación y luego conecta.
- El selector de idioma de la interfaz está en Información general -> Acceso al Gateway -> Idioma, no en Apariencia.
Relacionado