Quando utilizzarla
- Esegui OpenClaw dietro un proxy con riconoscimento dell’identità (Pomerium, Caddy + OAuth, nginx + oauth2-proxy, Traefik + autenticazione inoltrata).
- Il proxy gestisce tutta l’autenticazione e trasmette l’identità dell’utente tramite intestazioni.
- Ti trovi in un ambiente Kubernetes o containerizzato in cui il proxy è l’unico percorso verso il Gateway.
- Riscontri errori WebSocket
1008 unauthorizedperché i browser non possono trasmettere token nei payload WS.
Quando NON utilizzarla
- Il proxy non autentica gli utenti, ma funge soltanto da terminatore TLS o bilanciatore del carico.
- Esiste un qualsiasi percorso verso il Gateway che aggira il proxy, ad esempio aperture nel firewall o accesso dalla rete interna.
- Non hai la certezza che il proxy rimuova o sovrascriva correttamente le intestazioni inoltrate.
- Ti serve soltanto un accesso personale per un singolo utente; valuta invece Tailscale Serve + local loopback.
Come funziona
Proxy authenticates the user
Proxy adds an identity header
x-forwarded-user: nick@example.com.Gateway verifies trusted source
gateway.trustedProxies) e che non provenga dall’indirizzo local loopback o da un indirizzo dell’interfaccia locale del Gateway.Gateway extracts identity
Authorize
allowUsers, quando configurato, la richiesta viene autorizzata.Configurazione
Riferimento della configurazione
"trusted-proxy".Comportamento di associazione della Control UI
Quandogateway.auth.mode = "trusted-proxy" è attivo e la richiesta supera i controlli del proxy attendibile, le sessioni WebSocket della Control UI possono connettersi senza un’identità di associazione del dispositivo.
Implicazioni per gli ambiti:
- Le sessioni WebSocket della Control UI prive di dispositivo si connettono, ma per impostazione predefinita non ricevono alcun ambito operatore. OpenClaw azzera a
[]l’elenco degli ambiti richiesti, affinché una sessione non associata a un dispositivo/token approvato non possa dichiarare autonomamente le proprie autorizzazioni. - Se i metodi restituiscono
missing scopedopo una connessione WebSocket riuscita, utilizza HTTPS affinché il browser possa generare l’identità del dispositivo e completare l’associazione. Consulta HTTP non sicuro della Control UI. - Solo in caso di emergenza:
gateway.controlUi.dangerouslyDisableDeviceAuth=trueconserva gli ambiti richiesti anche senza identità del dispositivo. Ciò riduce gravemente la sicurezza; ripristina rapidamente l’impostazione precedente. Consulta HTTP non sicuro della Control UI.
x-openclaw-scopes nella richiesta di aggiornamento WebSocket della Control UI, OpenClaw limita gli ambiti della sessione all’intersezione tra quelli richiesti e quelli dichiarati. Questa intestazione non concede ambiti, ma limita soltanto quelli che la sessione può possedere.
Implicazioni:
- In questa modalità, l’associazione non è più il controllo principale per l’accesso alla Control UI.
- I criteri di autenticazione del proxy inverso e
allowUsersdiventano il controllo degli accessi effettivo. - Limita l’ingresso al Gateway esclusivamente agli IP dei proxy attendibili (
gateway.trustedProxies+ firewall).
gateway.controlUi.dangerouslyDisableDeviceAuth non concede ambiti a client arbitrari con client.mode: "backend" o strutturati come client CLI. L’automazione personalizzata deve utilizzare l’identità e l’associazione del dispositivo, il percorso helper backend locale diretto riservato client.id: "gateway-client" oppure il Plugin RPC HTTP di amministrazione, quando un’interfaccia HTTP di richiesta/risposta è più adatta.
Intestazione degli ambiti operatore
L’autenticazione tramite proxy attendibile è una modalità HTTP che include l’identità, quindi i chiamanti possono facoltativamente dichiarare gli ambiti operatore tramitex-openclaw-scopes nelle richieste API HTTP.
Nota: gli ambiti WebSocket sono determinati dall’handshake del protocollo Gateway e dall’associazione dell’identità del dispositivo. Nelle richieste di aggiornamento WebSocket della Control UI, x-openclaw-scopes limita soltanto gli ambiti negoziati della sessione e non ne concede alcuno. Consulta Comportamento di associazione della Control UI.
Esempi:
x-openclaw-scopes: operator.readx-openclaw-scopes: operator.read,operator.writex-openclaw-scopes: operator.admin,operator.write
- Quando l’intestazione è presente, OpenClaw rispetta l’insieme di ambiti dichiarato.
- Quando l’intestazione è presente ma vuota, la richiesta dichiara di non avere alcun ambito operatore.
- Quando l’intestazione è assente, le normali API HTTP che includono l’identità utilizzano come fallback l’insieme standard predefinito degli ambiti operatore (
operator.admin,operator.read,operator.write,operator.approvals,operator.pairing,operator.talk.secrets). - Per impostazione predefinita, le route HTTP dei Plugin con autenticazione Gateway sono più restrittive: quando
x-openclaw-scopesè assente, il relativo ambito di runtime utilizza come fallback soltantooperator.write. - Le richieste HTTP provenienti dal browser devono comunque superare il controllo
gateway.controlUi.allowedOrigins, o la modalità di fallback deliberata basata sull’intestazione Host, anche dopo il successo dell’autenticazione tramite proxy attendibile.
x-openclaw-scopes quando vuoi che una richiesta tramite proxy attendibile abbia ambiti più restrittivi di quelli predefiniti oppure quando una route di un Plugin con autenticazione Gateway richiede qualcosa di più ampio dell’ambito di scrittura.
Terminazione TLS e HSTS
Utilizza un unico punto di terminazione TLS e applica HSTS in quel punto.- Proxy TLS termination (recommended)
- Gateway TLS termination
https://control.example.com, configura Strict-Transport-Security nel proxy per quel dominio.- Adatto alle distribuzioni esposte a Internet.
- Mantiene in un unico punto il certificato e i criteri di rafforzamento della sicurezza HTTP.
- OpenClaw può continuare a utilizzare HTTP su local loopback dietro il proxy.
Indicazioni per l’implementazione
- Inizia con una durata massima breve, ad esempio
max-age=300, durante la convalida del traffico. - Passa a valori di lunga durata, ad esempio
max-age=31536000, soltanto dopo aver raggiunto un elevato grado di affidabilità. - Aggiungi
includeSubDomainssoltanto se ogni sottodominio è predisposto per HTTPS. - Utilizza il precaricamento soltanto se soddisfi intenzionalmente i relativi requisiti per l’intero insieme dei domini.
- Lo sviluppo locale limitato a local loopback non trae vantaggio da HSTS.
Esempi di configurazione del proxy
Pomerium
Pomerium
x-pomerium-claim-email, o in altre intestazioni delle attestazioni, e un JWT in x-pomerium-jwt-assertion.Caddy with OAuth
Caddy with OAuth
caddy-security può autenticare gli utenti e trasmettere le intestazioni di identità.nginx + oauth2-proxy
nginx + oauth2-proxy
x-auth-request-email.Traefik with forward auth
Traefik with forward auth
Configurazione mista dei token
L’avvio del Gateway rifiuta l’autenticazione tramite proxy attendibile se è configurato anche un token condiviso (gateway.auth.token o OPENCLAW_GATEWAY_TOKEN). Le due modalità si escludono a vicenda perché un token condiviso consentirebbe ai chiamanti sullo stesso host di autenticarsi attraverso un percorso completamente diverso dall’identità verificata dal proxy che questa modalità deve imporre.
Se l’avvio non riesce con un errore come gateway auth mode is trusted-proxy, but a shared token is also configured:
- Rimuovi il token condiviso quando utilizzi la modalità proxy attendibile, oppure
- Imposta
gateway.auth.modesu"token"se intendi utilizzare l’autenticazione basata su token.
gateway.auth.password / OPENCLAW_GATEWAY_PASSWORD. Il ripiego sul token rimane intenzionalmente non supportato nella modalità proxy attendibile.
Elenco di controllo della sicurezza
Prima di abilitare l’autenticazione tramite proxy attendibile, verifica quanto segue:- Il proxy è l’unico percorso: la porta del Gateway è protetta da firewall e accessibile esclusivamente dal proxy.
- trustedProxies è ridotto al minimo: include solo gli indirizzi IP effettivi del proxy, non intere sottoreti.
- L’origine local loopback del proxy è intenzionale: l’autenticazione tramite proxy attendibile rifiuta l’accesso in caso di errore per le richieste provenienti dal local loopback, a meno che
gateway.auth.trustedProxy.allowLoopbacknon sia esplicitamente abilitato per un proxy sullo stesso host. - Il proxy elimina le intestazioni: il proxy sovrascrive, senza aggiungere valori, le intestazioni
x-forwarded-*provenienti dai client. - Terminazione TLS: il proxy gestisce TLS; gli utenti si connettono tramite HTTPS.
- allowedOrigins è esplicito: l’interfaccia di controllo non in local loopback utilizza un valore esplicito per
gateway.controlUi.allowedOrigins. - allowUsers è impostato (consigliato): limita l’accesso agli utenti noti anziché consentirlo a chiunque sia autenticato.
- Nessuna configurazione mista dei token: non impostare contemporaneamente
gateway.auth.tokenegateway.auth.mode: "trusted-proxy". - Il ripiego sulla password locale è privato: se configuri
gateway.auth.passwordper i chiamanti interni diretti, proteggi la porta del Gateway con un firewall affinché i client remoti che non passano dal proxy non possano raggiungerla direttamente.
Controllo di sicurezza
openclaw security audit segnala l’autenticazione tramite proxy attendibile con un rilevamento di gravità critica. È intenzionale: serve a ricordare che la sicurezza è delegata alla configurazione del proxy.
Il controllo verifica:
- Avviso o promemoria critico di base
gateway.trusted_proxy_auth. - Configurazione
trustedProxiesmancante. - Configurazione
userHeadermancante. allowUsersvuoto, che consente l’accesso a qualsiasi utente autenticato.allowLoopbackabilitato per le origini proxy sullo stesso host.
gateway.controlUi.allowedOrigins con carattere jolly o mancante e ripiego sull’origine basato sull’intestazione Host.
Risoluzione dei problemi
trusted_proxy_untrusted_source
trusted_proxy_untrusted_source
gateway.trustedProxies. Verifica quanto segue:- L’indirizzo IP del proxy è corretto? Gli indirizzi IP dei container Docker possono cambiare.
- È presente un bilanciatore del carico davanti al proxy?
- Utilizza
docker inspectokubectl get pods -o wideper individuare gli indirizzi IP effettivi.
trusted_proxy_loopback_source
trusted_proxy_loopback_source
- Il proxy si connette da
127.0.0.1/::1? - Stai tentando di utilizzare l’autenticazione tramite proxy attendibile con un reverse proxy in local loopback sullo stesso host?
- Preferisci l’autenticazione tramite token o password per i client interni sullo stesso host che non passano dal proxy, oppure
- Instrada il traffico tramite un indirizzo di proxy attendibile non in local loopback e mantieni tale indirizzo IP in
gateway.trustedProxies, oppure - Per un reverse proxy intenzionale sullo stesso host, imposta
gateway.auth.trustedProxy.allowLoopback = true, mantieni l’indirizzo di local loopback ingateway.trustedProxiese assicurati che il proxy elimini o sovrascriva le intestazioni d’identità.
trusted_proxy_local_interface_source / trusted_proxy_local_interface_check_failed
trusted_proxy_local_interface_source / trusted_proxy_local_interface_check_failed
..._check_failed indica che si è verificato un errore durante il rilevamento delle interfacce, pertanto OpenClaw rifiuta l’accesso in caso di errore.Verifica quanto segue:- Un processo sullo stesso host del Gateway sta inviando direttamente le intestazioni d’identità, ignorando il proxy?
- Il proxy viene eseguito nello stesso spazio dei nomi di rete del Gateway, con un indirizzo IP che compare anche come interfaccia locale?
allowLoopback esclusivamente per un’autentica configurazione con proxy sullo stesso host.trusted_proxy_user_missing
trusted_proxy_user_missing
- Il proxy è configurato per trasmettere le intestazioni d’identità?
- Il nome dell’intestazione è corretto? Non distingue tra maiuscole e minuscole, ma l’ortografia è importante.
- L’utente è effettivamente autenticato presso il proxy?
trusted_proxy_missing_header_*
trusted_proxy_missing_header_*
- La configurazione del proxy relativa a tali intestazioni specifiche.
- Se le intestazioni vengono eliminate in qualche punto della catena.
trusted_proxy_user_not_allowed
trusted_proxy_user_not_allowed
allowUsers. Aggiungilo oppure rimuovi l’elenco di elementi consentiti.trusted_proxy_no_proxies_configured / trusted_proxy_config_missing
trusted_proxy_no_proxies_configured / trusted_proxy_config_missing
gateway.auth.mode è impostato su "trusted-proxy", ma gateway.trustedProxies è vuoto oppure manca gateway.auth.trustedProxy. Ogni richiesta viene rifiutata finché non vengono impostati entrambi.trusted_proxy_origin_not_allowed
trusted_proxy_origin_not_allowed
Origin del browser non ha superato i controlli dell’origine dell’interfaccia di controllo.Verifica quanto segue:gateway.controlUi.allowedOriginsinclude l’origine esatta del browser.- Non fai affidamento su origini con caratteri jolly, a meno che tu non voglia intenzionalmente consentire qualsiasi origine.
- Se utilizzi intenzionalmente la modalità di ripiego basata sull’intestazione Host,
gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=trueè impostato deliberatamente.
Connection succeeds but methods report missing scope
Connection succeeds but methods report missing scope
chat.history, sessions.list o
models.list non riesce e restituisce missing scope: operator.read.Cause comuni:- Sessione dell’interfaccia di controllo senza dispositivo: l’autenticazione tramite proxy attendibile può ammettere la connessione WebSocket senza un’identità del dispositivo, ma OpenClaw elimina deliberatamente gli ambiti dalle sessioni senza dispositivo.
- Client backend personalizzato:
gateway.controlUi.dangerouslyDisableDeviceAuthè limitato all’interfaccia di controllo e non concede ambiti a client WebSocket arbitrari di tipo backend o CLI. x-openclaw-scopeseccessivamente restrittivo: se il proxy inserisce questa intestazione nella richiesta di aggiornamento WebSocket dell’interfaccia di controllo, gli ambiti della sessione sono limitati a tale insieme. Un valore vuoto dell’intestazione non concede alcun ambito.
- Per l’interfaccia di controllo, utilizza HTTPS affinché il browser possa generare l’identità del dispositivo e completare l’associazione.
- Per l’automazione personalizzata, utilizza l’identità e l’associazione del dispositivo, il percorso riservato dell’helper backend diretto locale
gateway-clientoppure RPC HTTP di amministrazione. - Utilizza
gateway.controlUi.dangerouslyDisableDeviceAuth: trueesclusivamente come soluzione temporanea di emergenza per l’interfaccia di controllo.
WebSocket still failing
WebSocket still failing
- Supporti gli aggiornamenti WebSocket (
Upgrade: websocket,Connection: upgrade). - Trasmetta le intestazioni d’identità nelle richieste di aggiornamento WebSocket, non solo in quelle HTTP.
- Non disponga di un percorso di autenticazione separato per le connessioni WebSocket.
Migrazione dall’autenticazione tramite token
Configure the proxy
Test the proxy independently
Update OpenClaw config
Restart the Gateway
Test WebSocket
Audit
openclaw security audit ed esamina i rilevamenti.Argomenti correlati
- Configurazione — riferimento della configurazione
- Ambiti dell’operatore — ruoli, ambiti e controlli di approvazione
- Accesso remoto — altri modelli di accesso remoto
- Sicurezza — guida completa alla sicurezza
- Tailscale — alternativa più semplice per l’accesso limitato alla tailnet