Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Quando usar
Use o modo de autenticaçãotrusted-proxy quando:
- Você executa o OpenClaw atrás de um proxy ciente de identidade (Pomerium, Caddy + OAuth, nginx + oauth2-proxy, Traefik + forward auth).
- Seu proxy lida com toda a autenticação e passa a identidade do usuário por meio de cabeçalhos.
- Você está em um ambiente Kubernetes ou de contêiner em que o proxy é o único caminho até o Gateway.
- Você está encontrando erros WebSocket
1008 unauthorizedporque navegadores não conseguem passar tokens em payloads WS.
Quando NÃO usar
- Se seu proxy não autentica usuários (apenas um terminador TLS ou balanceador de carga).
- Se houver qualquer caminho até o Gateway que contorne o proxy (brechas no firewall, acesso pela rede interna).
- Se você não tiver certeza de que seu proxy remove/substitui corretamente os cabeçalhos encaminhados.
- Se você só precisa de acesso pessoal de usuário único (considere Tailscale Serve + loopback para uma configuração mais simples).
Como funciona
Proxy adds an identity header
O proxy adiciona um cabeçalho com a identidade do usuário autenticado (por exemplo,
x-forwarded-user: nick@example.com).Gateway verifies trusted source
O OpenClaw verifica se a solicitação veio de um IP de proxy confiável (configurado em
gateway.trustedProxies).Comportamento de pareamento da Control UI
Quandogateway.auth.mode = "trusted-proxy" está ativo e a solicitação passa nas verificações de trusted-proxy, as sessões WebSocket da Control UI podem se conectar sem identidade de pareamento de dispositivo.
Implicações:
- O pareamento deixa de ser a barreira principal para acesso à Control UI neste modo.
- A política de autenticação do seu proxy reverso e
allowUsersse tornam o controle de acesso efetivo. - Mantenha a entrada do gateway bloqueada apenas para IPs de proxy confiáveis (
gateway.trustedProxies+ firewall).
Configuração
Referência de configuração
Array de endereços IP de proxy nos quais confiar. Solicitações de outros IPs são rejeitadas.
Deve ser
"trusted-proxy".Nome do cabeçalho que contém a identidade do usuário autenticado.
Cabeçalhos adicionais que devem estar presentes para que a solicitação seja confiável.
Lista de permissão de identidades de usuário. Vazio significa permitir todos os usuários autenticados.
Suporte opcional para proxies reversos de loopback no mesmo host. O padrão é
false.Terminação TLS e HSTS
Use um ponto de terminação TLS e aplique HSTS nele.- Proxy TLS termination (recommended)
- Gateway TLS termination
Quando seu proxy reverso lida com HTTPS para
https://control.example.com, defina Strict-Transport-Security no proxy para esse domínio.- Boa opção para implantações expostas à internet.
- Mantém a política de certificados e endurecimento HTTP em um só lugar.
- O OpenClaw pode permanecer em HTTP de loopback atrás do proxy.
Orientação de implantação gradual
- Comece primeiro com uma duração máxima curta (por exemplo,
max-age=300) enquanto valida o tráfego. - Aumente para valores de longa duração (por exemplo,
max-age=31536000) somente depois de ter alta confiança. - Adicione
includeSubDomainssomente se todos os subdomínios estiverem prontos para HTTPS. - Use preload somente se você atender intencionalmente aos requisitos de preload para todo o conjunto de domínios.
- O desenvolvimento local apenas em loopback não se beneficia de HSTS.
Exemplos de configuração de proxy
Pomerium
Pomerium
O Pomerium passa a identidade em Trecho de configuração do Pomerium:
x-pomerium-claim-email (ou outros cabeçalhos de declaração) e um JWT em x-pomerium-jwt-assertion.Caddy with OAuth
Caddy with OAuth
O Caddy com o Plugin Trecho de Caddyfile:
caddy-security pode autenticar usuários e passar cabeçalhos de identidade.nginx + oauth2-proxy
nginx + oauth2-proxy
O oauth2-proxy autentica usuários e passa a identidade em Trecho de configuração do nginx:
x-auth-request-email.Traefik with forward auth
Traefik with forward auth
Configuração mista de token
O OpenClaw rejeita configurações ambíguas em que tanto umgateway.auth.token (ou OPENCLAW_GATEWAY_TOKEN) quanto o modo trusted-proxy estão ativos ao mesmo tempo. Configurações mistas de token podem fazer com que solicitações de loopback sejam autenticadas silenciosamente pelo caminho de autenticação errado.
Se você vir um erro mixed_trusted_proxy_token na inicialização:
- Remova o token compartilhado ao usar o modo trusted-proxy, ou
- Altere
gateway.auth.modepara"token"se você pretende usar autenticação baseada em token.
gateway.auth.password / OPENCLAW_GATEWAY_PASSWORD em vez disso. O fallback por token continua intencionalmente sem suporte no modo trusted-proxy.
Cabeçalho de escopos de operador
A autenticação trusted-proxy é um modo HTTP portador de identidade, então os chamadores podem declarar opcionalmente escopos de operador comx-openclaw-scopes.
Exemplos:
x-openclaw-scopes: operator.readx-openclaw-scopes: operator.read,operator.writex-openclaw-scopes: operator.admin,operator.write
- Quando o cabeçalho está presente, o OpenClaw respeita o conjunto de escopos declarado.
- Quando o cabeçalho está presente, mas vazio, a solicitação declara nenhum escopo de operador.
- Quando o cabeçalho está ausente, APIs HTTP portadoras de identidade normais recorrem ao conjunto padrão de escopos de operador.
- As rotas HTTP de Plugin com autenticação de Gateway são mais restritas por padrão: quando
x-openclaw-scopesestá ausente, o escopo de runtime delas recorre aoperator.write. - Solicitações HTTP de origem em navegador ainda precisam passar por
gateway.controlUi.allowedOrigins(ou modo deliberado de fallback por cabeçalho Host) mesmo depois que a autenticação trusted-proxy é bem-sucedida.
x-openclaw-scopes explicitamente quando quiser que uma solicitação trusted-proxy seja mais restrita do que os padrões, ou quando uma rota de Plugin com autenticação de gateway precisar de algo mais forte do que escopo de escrita.
Lista de verificação de segurança
Antes de habilitar a autenticação trusted-proxy, verifique:- O proxy é o único caminho: A porta do Gateway está protegida por firewall de tudo, exceto seu proxy.
- trustedProxies é mínimo: Somente os IPs reais do seu proxy, não sub-redes inteiras.
- A origem de proxy em loopback é deliberada: A autenticação trusted-proxy falha de forma fechada para solicitações com origem em loopback, a menos que
gateway.auth.trustedProxy.allowLoopbackesteja explicitamente habilitado para um proxy no mesmo host. - O proxy remove cabeçalhos: Seu proxy sobrescreve (não acrescenta) cabeçalhos
x-forwarded-*dos clientes. - Terminação TLS: Seu proxy lida com TLS; usuários se conectam via HTTPS.
- allowedOrigins é explícito: A UI de Controle não loopback usa
gateway.controlUi.allowedOriginsexplícito. - allowUsers está definido (recomendado): Restrinja a usuários conhecidos em vez de permitir qualquer pessoa autenticada.
- Nenhuma configuração mista de token: Não defina
gateway.auth.tokenegateway.auth.mode: "trusted-proxy"ao mesmo tempo. - O fallback de senha local é privado: Se você configurar
gateway.auth.passwordpara chamadores diretos internos, mantenha a porta do Gateway protegida por firewall para que clientes remotos que não passam pelo proxy não possam acessá-la diretamente.
Auditoria de segurança
openclaw security audit sinalizará a autenticação trusted-proxy com uma descoberta de severidade crítica. Isso é intencional — é um lembrete de que você está delegando a segurança à configuração do seu proxy.
A auditoria verifica:
- Aviso/lembrete crítico base
gateway.trusted_proxy_auth - Configuração
trustedProxiesausente - Configuração
userHeaderausente allowUsersvazio (permite qualquer usuário autenticado)allowLoopbackhabilitado para origens de proxy no mesmo host- Política de origem do navegador curinga ou ausente em superfícies expostas da UI de Controle
Solução de problemas
trusted_proxy_untrusted_source
trusted_proxy_untrusted_source
A solicitação não veio de um IP em
gateway.trustedProxies. Verifique:- O IP do proxy está correto? (IPs de contêineres Docker podem mudar.)
- Há um balanceador de carga na frente do seu proxy?
- Use
docker inspectoukubectl get pods -o widepara encontrar os IPs reais.
trusted_proxy_loopback_source
trusted_proxy_loopback_source
O OpenClaw rejeitou uma solicitação trusted-proxy com origem em loopback.Verifique:
- O proxy está se conectando de
127.0.0.1/::1? - Você está tentando usar autenticação trusted-proxy com um proxy reverso local no mesmo host?
- Prefira autenticação por token/senha para clientes internos no mesmo host que não passam pelo proxy, ou
- Encaminhe por um endereço de proxy confiável que não seja loopback e mantenha esse IP em
gateway.trustedProxies, ou - Para um proxy reverso deliberado no mesmo host, defina
gateway.auth.trustedProxy.allowLoopback = true, mantenha o endereço de loopback emgateway.trustedProxiese garanta que o proxy remova ou sobrescreva cabeçalhos de identidade.
trusted_proxy_user_missing
trusted_proxy_user_missing
O cabeçalho de usuário estava vazio ou ausente. Verifique:
- Seu proxy está configurado para passar cabeçalhos de identidade?
- O nome do cabeçalho está correto? (não diferencia maiúsculas de minúsculas, mas a grafia importa)
- O usuário está realmente autenticado no proxy?
trusted_proxy_missing_header_*
trusted_proxy_missing_header_*
Um cabeçalho obrigatório não estava presente. Verifique:
- Sua configuração de proxy para esses cabeçalhos específicos.
- Se cabeçalhos estão sendo removidos em algum ponto da cadeia.
trusted_proxy_user_not_allowed
trusted_proxy_user_not_allowed
O usuário está autenticado, mas não está em
allowUsers. Adicione-o ou remova a lista de permissão.trusted_proxy_origin_not_allowed
trusted_proxy_origin_not_allowed
A autenticação trusted-proxy foi bem-sucedida, mas o cabeçalho
Origin do navegador não passou nas verificações de origem da UI de Controle.Verifique:gateway.controlUi.allowedOriginsinclui a origem exata do navegador.- Você não está dependendo de origens curinga, a menos que queira intencionalmente o comportamento de permitir tudo.
- Se você usa intencionalmente o modo de fallback de cabeçalho Host,
gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=trueestá definido deliberadamente.
WebSocket still failing
WebSocket still failing
Garanta que seu proxy:
- Ofereça suporte a upgrades WebSocket (
Upgrade: websocket,Connection: upgrade). - Passe os cabeçalhos de identidade em solicitações de upgrade WebSocket (não apenas HTTP).
- Não tenha um caminho de autenticação separado para conexões WebSocket.
Migração da autenticação por token
Se você está migrando da autenticação por token para trusted-proxy:Test the proxy independently
Teste a configuração do proxy de forma independente (curl com cabeçalhos).
Relacionados
- Configuração — referência de configuração
- Acesso remoto — outros padrões de acesso remoto
- Segurança — guia completo de segurança
- Tailscale — alternativa mais simples para acesso somente por tailnet