Cuándo usarlo
- OpenClaw se ejecuta detrás de un proxy con reconocimiento de identidad (Pomerium, Caddy + OAuth, nginx + oauth2-proxy, Traefik + autenticación reenviada).
- El proxy gestiona toda la autenticación y transmite la identidad del usuario mediante encabezados.
- Se utiliza un entorno de Kubernetes o contenedores en el que el proxy es la única ruta al Gateway.
- Se producen errores de WebSocket
1008 unauthorizedporque los navegadores no pueden transmitir tokens en las cargas útiles de WS.
Cuándo NO usarlo
- El proxy no autentica a los usuarios (solo es un terminador TLS o un balanceador de carga).
- Existe alguna ruta al Gateway que evita el proxy (aperturas en el cortafuegos, acceso desde la red interna).
- No se sabe con certeza si el proxy elimina o sobrescribe correctamente los encabezados reenviados.
- Solo se necesita acceso personal para un único usuario (considere en su lugar Tailscale Serve + bucle invertido).
Cómo funciona
El proxy autentica al usuario
El proxy añade un encabezado de identidad
x-forwarded-user: nick@example.com).El Gateway verifica el origen de confianza
gateway.trustedProxies) y que no sea la dirección de bucle invertido ni una dirección de interfaz local del propio Gateway.El Gateway extrae la identidad
Autorizar
allowUsers (cuando se ha configurado), se autoriza la solicitud.Configuración
Referencia de configuración
"trusted-proxy".operator.admin permite que cada usuario autenticado por el proxy solicite una concesión automática de dispositivo con privilegios administrativos completos, hace que las solicitudes sin ámbitos reciban automáticamente privilegios administrativos completos y activa el hallazgo de auditoría de seguridad CRÍTICO gateway.trusted_proxy_device_auto_approve_admin, además de una advertencia al iniciar el Gateway.Aprobación automática de dispositivos
La autenticación mediante proxy de confianza puede utilizar opcionalmente la identidad del proxy como límite de aprobación para nuevos dispositivos de navegador:enabled: false. Cuando se habilita, se aplican todas estas reglas:
- El WebSocket debe haberse autenticado mediante el método
trusted-proxycon una identidad de usuario no vacía que haya superadoallowUserscuando haya una lista de usuarios permitidos configurada. Las conexiones mediante token, contraseña, Tailscale y sin autenticar nunca utilizan esta política. - Solo se puede aprobar automáticamente un nuevo dispositivo de navegador de la interfaz de control o WebChat. Cualquier solicitud para un dispositivo existente, incluida una ampliación de ámbitos, permanece pendiente de aprobación manual mediante
openclaw devices approve <requestId>. - El dispositivo se aprueba con el rol
operator. Si la solicitud de conexión incluye ámbitos, la concesión corresponde a la intersección exacta entre los ámbitos solicitados ydeviceAutoApprove.scopes. Si la solicitud omite los ámbitos, se concede la lista configurada; cuando se omite esa lista, los valores predeterminados sonoperator.read,operator.writeyoperator.approvals. A continuación, la concesión resultante también queda limitada por el encabezado de proxyx-openclaw-scopesde la conexión, si está presente, de modo que un proxy que restrinja los ámbitos de un usuario también limite la concesión persistente del dispositivo, no solo la sesión; un encabezado presente pero vacío no concede ningún ámbito. Este límite se aplica incluso cuando el cliente omite su propia lista de ámbitos. operator.adminsolo se permite si figura explícitamente endeviceAutoApprove.scopes. Cuando se incluye, cada usuario autenticado por el proxy puede solicitar y recibir automáticamente privilegios administrativos completos en un nuevo dispositivo de navegador; las solicitudes sin ámbitos reciben automáticamente privilegios administrativos completos.openclaw security auditinforma del hallazgo CRÍTICOgateway.trusted_proxy_device_auto_approve_admin, y el Gateway registra una advertencia una vez durante el inicio. Es preferible realizar la aprobación administrativa manual medianteopenclaw devices approveoopenclaw devices rotatehasta que estén disponibles los roles por identidad.
Comportamiento del emparejamiento de la interfaz de control
Cuandogateway.auth.mode = "trusted-proxy" está activo y la solicitud supera las comprobaciones del proxy de confianza, las sesiones WebSocket de la interfaz de control pueden conectarse sin identidad de emparejamiento del dispositivo.
Implicaciones para los ámbitos:
- Las sesiones WebSocket de la interfaz de control sin dispositivo se conectan, pero de forma predeterminada no reciben ningún ámbito de operador. OpenClaw vacía la lista de ámbitos solicitados y la convierte en
[]para que una sesión que no esté vinculada a un dispositivo o token emparejado y aprobado no pueda autodeclarar permisos. - Si los métodos fallan con
missing scopedespués de establecer correctamente una conexión WebSocket, utilice HTTPS para que el navegador pueda generar la identidad del dispositivo y completar el emparejamiento. Consulte HTTP no seguro de la interfaz de control. - Las configuraciones antiguas que todavía contienen la clave retirada
gateway.controlUi.dangerouslyDisableDeviceAuth=trueutilizan la migración de actualización de la interfaz de control limitada.
x-openclaw-scopes en la solicitud de actualización a WebSocket de la interfaz de control, OpenClaw limita los ámbitos de la sesión a la intersección entre los ámbitos solicitados y los declarados. Este encabezado no concede ámbitos; únicamente restringe los que puede tener la sesión. Cuando deviceAutoApprove.enabled es verdadero, el mismo límite también se aplica a la concesión persistente del dispositivo escrita por la aprobación automática de dispositivos, de modo que un dispositivo aprobado automáticamente nunca tenga más ámbitos que los declarados por el proxy.
Implicaciones:
- El emparejamiento deja de ser el control principal para el acceso a la interfaz de control sin dispositivo. Cuando
deviceAutoApprove.enabledes verdadero, la identidad del proxy también se convierte en el control de aprobación para registrar nuevos dispositivos de navegador. - La política de autenticación del proxy inverso y
allowUsersse convierten en el control de acceso efectivo. - Mantenga el acceso de entrada al Gateway restringido únicamente a las IP de proxy de confianza (
gateway.trustedProxies+ cortafuegos).
client.mode: "backend" ni con formato de CLI. La automatización personalizada debe utilizar
la identidad y el emparejamiento de dispositivos, la ruta auxiliar reservada del backend local directo client.id: "gateway-client"
o el Plugin RPC HTTP de administración
cuando sea más adecuada una interfaz HTTP de solicitud y respuesta.
Encabezado de ámbitos del operador
La autenticación mediante proxy de confianza es un modo HTTP que contiene identidad, por lo que los clientes pueden declarar opcionalmente ámbitos de operador conx-openclaw-scopes en las solicitudes a la API HTTP.
Nota: los ámbitos de WebSocket se determinan mediante el protocolo de enlace del Gateway y la vinculación de la identidad del dispositivo. En las solicitudes de actualización a WebSocket de la interfaz de control, x-openclaw-scopes solo limita los ámbitos negociados de la sesión, no los concede. Consulte el comportamiento de emparejamiento de la interfaz de control.
Ejemplos:
x-openclaw-scopes: operator.readx-openclaw-scopes: operator.read,operator.writex-openclaw-scopes: operator.admin,operator.write
- Cuando el encabezado está presente, OpenClaw respeta el conjunto de ámbitos declarado.
- Cuando el encabezado está presente pero vacío, la solicitud declara que no tiene ningún ámbito de operador.
- Cuando el encabezado está ausente, las API HTTP normales que contienen identidad recurren al conjunto estándar de ámbitos predeterminados del operador (
operator.admin,operator.read,operator.write,operator.approvals,operator.pairing,operator.talk.secrets). - Las rutas HTTP de plugins con autenticación del Gateway son más restrictivas de forma predeterminada: cuando
x-openclaw-scopesestá ausente, su ámbito de ejecución recurre únicamente aoperator.write. - Las solicitudes HTTP con origen en el navegador deben seguir superando
gateway.controlUi.allowedOrigins(o el modo alternativo deliberado mediante el encabezado Host), incluso después de que la autenticación mediante proxy de confianza se complete correctamente.
x-openclaw-scopes explícitamente cuando quiera que una solicitud mediante proxy de confianza sea más restrictiva que los valores predeterminados o cuando una ruta de plugin con autenticación del Gateway necesite algo más potente que el ámbito de escritura.
Terminación TLS y HSTS
Use un único punto de terminación TLS y aplique HSTS allí.- Terminación TLS en el proxy (recomendada)
- Terminación TLS en el Gateway
https://control.example.com, configure Strict-Transport-Security en el proxy para ese dominio.- Adecuado para implementaciones expuestas a Internet.
- Mantiene la política de certificados y protección de HTTP en un solo lugar.
- OpenClaw puede permanecer en HTTP de bucle invertido detrás del proxy.
Orientación para el despliegue
- Comience primero con una antigüedad máxima corta (por ejemplo,
max-age=300) mientras valida el tráfico. - Aumente a valores de larga duración (por ejemplo,
max-age=31536000) solo cuando tenga un alto grado de confianza. - Añada
includeSubDomainssolo si todos los subdominios están preparados para HTTPS. - Use la precarga solo si cumple deliberadamente los requisitos de precarga para todo el conjunto de dominios.
- El desarrollo local limitado al bucle invertido no se beneficia de HSTS.
Ejemplos de configuración del proxy
Pomerium
Pomerium
x-pomerium-claim-email (u otros encabezados de declaraciones) y un JWT en x-pomerium-jwt-assertion.Caddy con OAuth
Caddy con OAuth
caddy-security y transmitir encabezados de identidad.nginx + oauth2-proxy
nginx + oauth2-proxy
x-auth-request-email.Traefik con autenticación reenviada
Traefik con autenticación reenviada
Configuración mixta de tokens
El inicio del Gateway rechaza la autenticación mediante proxy de confianza si también hay configurado un token compartido (gateway.auth.token o OPENCLAW_GATEWAY_TOKEN). Ambos son mutuamente excluyentes porque un token compartido permitiría a los clientes del mismo host autenticarse mediante una ruta completamente diferente de la identidad verificada por el proxy que este modo está diseñado para exigir.
Si el inicio falla con un error como gateway auth mode is trusted-proxy, but a shared token is also configured:
- Elimine el token compartido cuando use el modo de proxy de confianza, o
- Cambie
gateway.auth.modea"token"si pretende usar autenticación mediante tokens.
gateway.auth.password / OPENCLAW_GATEWAY_PASSWORD. El uso alternativo de tokens sigue sin admitirse de forma intencionada en el modo de proxy de confianza.
Lista de comprobación de seguridad
Antes de habilitar la autenticación mediante proxy de confianza, verifique lo siguiente:- El proxy es la única ruta: El puerto del Gateway está protegido mediante un cortafuegos frente a todo excepto el proxy.
- trustedProxies es mínimo: Solo incluye las IP reales de los proxies, no subredes completas.
- El origen del proxy de bucle invertido es deliberado: La autenticación mediante proxy de confianza produce un fallo seguro para las solicitudes originadas en el bucle invertido, a menos que
gateway.auth.trustedProxy.allowLoopbackse habilite explícitamente para un proxy del mismo host. - El proxy elimina los encabezados: El proxy sobrescribe (no añade) los encabezados
x-forwarded-*de los clientes. - Terminación TLS: El proxy gestiona TLS; los usuarios se conectan mediante HTTPS.
- allowedOrigins es explícito: La interfaz de control fuera del bucle invertido usa
gateway.controlUi.allowedOriginsexplícito. - allowUsers está configurado (recomendado): Restrinja el acceso a usuarios conocidos en lugar de permitir a cualquiera que esté autenticado.
- No hay una configuración mixta de tokens: No configure simultáneamente
gateway.auth.tokenygateway.auth.mode: "trusted-proxy". - El uso alternativo de contraseñas locales es privado: Si configura
gateway.auth.passwordpara clientes internos directos, mantenga el puerto del Gateway protegido mediante un cortafuegos para que los clientes remotos que no usen el proxy no puedan acceder directamente. - La aprobación automática de dispositivos es deliberada: Si
deviceAutoApprove.enabledes verdadero, trate la seguridad de la cuenta del proxy inverso como el límite de inscripción de dispositivos y mantenga la lista de ámbitos concedidos sin privilegios de administración y al mínimo.
Auditoría de seguridad
openclaw security audit señala la autenticación mediante proxy de confianza con un hallazgo de gravedad crítica. Esto es intencionado; sirve para recordar que se está delegando la seguridad a la configuración del proxy.
La auditoría comprueba:
- Advertencia o recordatorio crítico de
gateway.trusted_proxy_authbásico. - Falta la configuración de
trustedProxies. - Falta la configuración de
userHeader. allowUsersvacío (permite a cualquier usuario autenticado).allowLoopbackhabilitado para los orígenes de proxy del mismo host.- Aprobación automática de dispositivos del navegador habilitada (delega el emparejamiento de nuevos dispositivos a la identidad del proxy).
gateway.controlUi.allowedOrigins con comodín o ausente y uso alternativo del origen mediante el encabezado Host.
Solución de problemas
trusted_proxy_untrusted_source
trusted_proxy_untrusted_source
gateway.trustedProxies. Compruebe:- ¿Es correcta la IP del proxy? (Las IP de los contenedores Docker pueden cambiar).
- ¿Hay un equilibrador de carga delante del proxy?
- Use
docker inspectokubectl get pods -o widepara encontrar las IP reales.
trusted_proxy_loopback_source
trusted_proxy_loopback_source
- ¿El proxy se conecta desde
127.0.0.1/::1? - ¿Está intentando usar la autenticación mediante proxy de confianza con un proxy inverso de bucle invertido en el mismo host?
- Prefiera la autenticación mediante token o contraseña para los clientes internos del mismo host que no pasen por el proxy, o
- Enrute a través de una dirección de proxy de confianza que no sea de bucle invertido y mantenga esa IP en
gateway.trustedProxies, o - Para un proxy inverso deliberado en el mismo host, configure
gateway.auth.trustedProxy.allowLoopback = true, mantenga la dirección de bucle invertido engateway.trustedProxiesy asegúrese de que el proxy elimine o sobrescriba los encabezados de identidad.
trusted_proxy_local_interface_source / trusted_proxy_local_interface_check_failed
trusted_proxy_local_interface_source / trusted_proxy_local_interface_check_failed
..._check_failed significa que se produjo un error en la propia detección de interfaces, por lo que OpenClaw produce un fallo seguro.Compruebe:- ¿Algún proceso del propio host del Gateway envía directamente encabezados de identidad y omite el proxy?
- ¿El proxy se ejecuta en el mismo espacio de nombres de red que el Gateway, con una IP que también aparece como interfaz local?
allowLoopback únicamente para una configuración real de proxy en el mismo host.trusted_proxy_user_missing
trusted_proxy_user_missing
- ¿El proxy está configurado para transmitir encabezados de identidad?
- ¿El nombre del encabezado es correcto? (No distingue entre mayúsculas y minúsculas, pero la ortografía es importante).
- ¿El usuario está realmente autenticado en el proxy?
trusted_proxy_missing_header_*
trusted_proxy_missing_header_*
- La configuración del proxy para esos encabezados específicos.
- Si los encabezados se están eliminando en algún punto de la cadena.
trusted_proxy_user_not_allowed
trusted_proxy_user_not_allowed
allowUsers. Añádalo o elimine la lista de permitidos.trusted_proxy_no_proxies_configured / trusted_proxy_config_missing
trusted_proxy_no_proxies_configured / trusted_proxy_config_missing
gateway.auth.mode es "trusted-proxy", pero gateway.trustedProxies está vacío, o falta el propio gateway.auth.trustedProxy. Todas las solicitudes se rechazan hasta que ambos estén configurados.trusted_proxy_origin_not_allowed
trusted_proxy_origin_not_allowed
Origin del navegador no superó las comprobaciones de origen de la interfaz de control.Compruebe lo siguiente:gateway.controlUi.allowedOriginsincluye el origen exacto del navegador.- No se depende de orígenes comodín, salvo que se desee intencionadamente permitir todos los orígenes.
- Si se utiliza intencionadamente el modo alternativo basado en el encabezado Host,
gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=trueestá configurado deliberadamente.
La conexión se establece, pero los métodos indican que falta un ámbito
La conexión se establece, pero los métodos indican que falta un ámbito
chat.history, sessions.list o
models.list falla con missing scope: operator.read.Causas habituales:- Sesión de la interfaz de control sin dispositivo: la autenticación mediante proxy de confianza puede permitir la conexión WebSocket sin identidad de dispositivo, pero OpenClaw elimina los ámbitos de las sesiones sin dispositivo por diseño.
- Cliente de backend personalizado: la entrada retirada de actualización de la interfaz de control nunca concede acceso a clientes WebSocket arbitrarios con formato de backend o CLI.
x-openclaw-scopesdemasiado restrictivo: si el proxy inserta este encabezado en la solicitud de actualización de WebSocket de la interfaz de control, los ámbitos de la sesión quedan limitados a ese conjunto. Un valor de encabezado vacío no concede ningún ámbito.
- Para la interfaz de control, utilice HTTPS para que el navegador pueda generar una identidad de dispositivo y completar el emparejamiento.
- Para la automatización personalizada, utilice identidad de dispositivo/emparejamiento, la ruta auxiliar de backend local directo reservada
gateway-cliento RPC HTTP de administración. - No añada la clave retirada
gateway.controlUi.dangerouslyDisableDeviceAutha la configuración actual. Las instalaciones anteriores utilizan automáticamente la migración de autoemparejamiento de una sola vez.
WebSocket sigue fallando
WebSocket sigue fallando
- Admite actualizaciones de WebSocket (
Upgrade: websocket,Connection: upgrade). - Transmite los encabezados de identidad en las solicitudes de actualización de WebSocket (no solo en HTTP).
- No tiene una ruta de autenticación independiente para las conexiones WebSocket.
Migración desde la autenticación mediante token
Configurar el proxy
Probar el proxy de forma independiente
Actualizar la configuración de OpenClaw
Reiniciar el Gateway
Probar WebSocket
Auditar
openclaw security audit y revise los resultados.Contenido relacionado
- Configuración — referencia de configuración
- Ámbitos del operador — roles, ámbitos y comprobaciones de aprobación
- Acceso remoto — otros patrones de acceso remoto
- Seguridad — guía de seguridad completa
- Tailscale — alternativa más sencilla para el acceso exclusivo desde la tailnet