Autenticazione Trusted Proxy
⚠️ Funzionalità sensibile dal punto di vista della sicurezza. Questa modalità delega completamente l’autenticazione al tuo reverse proxy. Una configurazione errata può esporre il tuo Gateway ad accessi non autorizzati. Leggi attentamente questa pagina prima di abilitarla.
Quando usarla
Usa la modalità authtrusted-proxy quando:
- Esegui OpenClaw dietro un proxy con riconoscimento dell’identità (Pomerium, Caddy + OAuth, nginx + oauth2-proxy, Traefik + forward auth)
- Il tuo proxy gestisce tutta l’autenticazione e passa l’identità utente tramite header
- Sei in un ambiente Kubernetes o container dove il proxy è l’unico percorso verso il Gateway
- Stai riscontrando errori WebSocket
1008 unauthorizedperché i browser non possono passare token nel payload WS
Quando NON usarla
- Se il tuo proxy non autentica gli utenti (è solo un terminatore TLS o un load balancer)
- Se esiste qualsiasi percorso verso il Gateway che aggira il proxy (buchi nel firewall, accesso dalla rete interna)
- Se non sei sicuro che il tuo proxy rimuova/sovrascriva correttamente gli header inoltrati
- Se hai bisogno solo di accesso personale per un singolo utente (considera Tailscale Serve + loopback per una configurazione più semplice)
Come funziona
- Il tuo reverse proxy autentica gli utenti (OAuth, OIDC, SAML, ecc.)
- Il proxy aggiunge un header con l’identità utente autenticata (ad esempio
x-forwarded-user: nick@example.com) - OpenClaw controlla che la richiesta provenga da un IP proxy attendibile (configurato in
gateway.trustedProxies) - OpenClaw estrae l’identità utente dall’header configurato
- Se tutto è corretto, la richiesta viene autorizzata
Comportamento dell’associazione della UI di controllo
Quandogateway.auth.mode = "trusted-proxy" è attivo e la richiesta supera i controlli
trusted-proxy, le sessioni WebSocket della UI di controllo possono connettersi senza
identità di associazione del dispositivo.
Implicazioni:
- In questa modalità, l’associazione non è più il controllo principale per l’accesso alla UI di controllo.
- La policy di autenticazione del tuo reverse proxy e
allowUsersdiventano il controllo di accesso effettivo. - Mantieni l’ingress del gateway bloccato solo agli IP del proxy attendibile (
gateway.trustedProxies+ firewall).
Configurazione
- L’autenticazione trusted-proxy rifiuta le richieste provenienti da sorgenti loopback (
127.0.0.1,::1, CIDR loopback). - I reverse proxy loopback sullo stesso host non soddisfano l’autenticazione trusted-proxy.
- Per configurazioni proxy loopback sullo stesso host, usa invece l’autenticazione con token/password oppure instrada tramite un indirizzo proxy attendibile non loopback che OpenClaw può verificare.
- Le distribuzioni della UI di controllo non loopback richiedono comunque
gateway.controlUi.allowedOriginsesplicito.
Riferimento della configurazione
| Campo | Obbligatorio | Descrizione |
|---|---|---|
gateway.trustedProxies | Sì | Array di indirizzi IP del proxy da considerare attendibili. Le richieste da altri IP vengono rifiutate. |
gateway.auth.mode | Sì | Deve essere "trusted-proxy" |
gateway.auth.trustedProxy.userHeader | Sì | Nome dell’header che contiene l’identità utente autenticata |
gateway.auth.trustedProxy.requiredHeaders | No | Header aggiuntivi che devono essere presenti perché la richiesta sia considerata attendibile |
gateway.auth.trustedProxy.allowUsers | No | Allowlist delle identità utente. Vuoto significa consentire tutti gli utenti autenticati. |
Terminazione TLS e HSTS
Usa un solo punto di terminazione TLS e applica HSTS lì.Pattern consigliato: terminazione TLS sul proxy
Quando il tuo reverse proxy gestisce HTTPS perhttps://control.example.com, imposta
Strict-Transport-Security sul proxy per quel dominio.
- È adatto alle distribuzioni esposte su internet.
- Mantiene certificati + policy di hardening HTTP in un unico punto.
- OpenClaw può restare su HTTP loopback dietro il proxy.
Terminazione TLS sul Gateway
Se OpenClaw stesso serve HTTPS direttamente (senza proxy che termina TLS), imposta:strictTransportSecurity accetta un valore stringa dell’header, oppure false per disabilitarlo esplicitamente.
Indicazioni per il rollout
- Inizia prima con un max age breve (ad esempio
max-age=300) mentre convalidi il traffico. - Passa a valori a lunga durata (ad esempio
max-age=31536000) solo quando la confidenza è alta. - Aggiungi
includeSubDomainssolo se ogni sottodominio è pronto per HTTPS. - Usa preload solo se soddisfi intenzionalmente i requisiti di preload per l’intero set di domini.
- Lo sviluppo locale solo loopback non trae beneficio da HSTS.
Esempi di configurazione del proxy
Pomerium
Pomerium passa l’identità inx-pomerium-claim-email (o altri claim header) e un JWT in x-pomerium-jwt-assertion.
Caddy con OAuth
Caddy con il plugincaddy-security può autenticare gli utenti e passare header di identità.
nginx + oauth2-proxy
oauth2-proxy autentica gli utenti e passa l’identità inx-auth-request-email.
Traefik con Forward Auth
Configurazione mista con token
OpenClaw rifiuta configurazioni ambigue in cui siagateway.auth.token (o OPENCLAW_GATEWAY_TOKEN) sia la modalità trusted-proxy sono attivi contemporaneamente. Le configurazioni miste con token possono far sì che le richieste loopback si autentichino silenziosamente sul percorso auth sbagliato.
Se all’avvio vedi un errore mixed_trusted_proxy_token:
- Rimuovi il token condiviso quando usi la modalità trusted-proxy, oppure
- Passa
gateway.auth.modea"token"se intendi usare l’autenticazione basata su token.
Header degli ambiti operatore
L’autenticazione trusted-proxy è una modalità HTTP che trasporta identità, quindi i chiamanti possono facoltativamente dichiarare ambiti operatore conx-openclaw-scopes.
Esempi:
x-openclaw-scopes: operator.readx-openclaw-scopes: operator.read,operator.writex-openclaw-scopes: operator.admin,operator.write
- Quando l’header è presente, OpenClaw rispetta l’insieme di ambiti dichiarato.
- Quando l’header è presente ma vuoto, la richiesta dichiara nessun ambito operatore.
- Quando l’header è assente, le normali API HTTP che trasportano identità ricadono nell’insieme standard di ambiti operatore predefiniti.
- Le route HTTP dei plugin con autenticazione gateway sono più ristrette per impostazione predefinita: quando
x-openclaw-scopesè assente, il loro ambito runtime ricade suoperator.write. - Le richieste HTTP provenienti dal browser devono comunque superare
gateway.controlUi.allowedOrigins(o la modalità deliberata di fallback dell’header Host) anche dopo il successo dell’autenticazione trusted-proxy.
- Invia
x-openclaw-scopesesplicitamente quando vuoi che una richiesta trusted-proxy sia più restrittiva dei valori predefiniti, oppure quando una route di plugin autenticata dal gateway richiede qualcosa di più forte dell’ambito write.
Checklist di sicurezza
Prima di abilitare l’autenticazione trusted-proxy, verifica:- Il proxy è l’unico percorso: la porta del Gateway è protetta dal firewall da tutto tranne che dal tuo proxy
- trustedProxies è minimale: solo gli IP effettivi del tuo proxy, non intere subnet
- Nessuna sorgente proxy loopback: l’autenticazione trusted-proxy fallisce in modalità chiusa per le richieste da sorgenti loopback
- Il proxy rimuove gli header: il tuo proxy sovrascrive (non aggiunge in coda) gli header
x-forwarded-*provenienti dai client - Terminazione TLS: il tuo proxy gestisce TLS; gli utenti si connettono via HTTPS
- allowedOrigins è esplicito: la UI di controllo non loopback usa
gateway.controlUi.allowedOriginsesplicito - allowUsers è impostato (consigliato): limita agli utenti conosciuti invece di consentire a chiunque sia autenticato
- Nessuna configurazione mista con token: non impostare sia
gateway.auth.tokensiagateway.auth.mode: "trusted-proxy"
Audit di sicurezza
openclaw security audit segnalerà l’autenticazione trusted-proxy con un rilevamento di severità critica. È intenzionale: è un promemoria del fatto che stai delegando la sicurezza alla configurazione del tuo proxy.
L’audit controlla:
- Avviso/promemoria critico di base
gateway.trusted_proxy_auth - Configurazione
trustedProxiesmancante - Configurazione
userHeadermancante allowUsersvuoto (consente qualsiasi utente autenticato)- Policy origine browser wildcard o mancante sulle superfici UI di controllo esposte
Risoluzione dei problemi
”trusted_proxy_untrusted_source”
La richiesta non proviene da un IP ingateway.trustedProxies. Controlla:
- L’IP del proxy è corretto? (Gli IP dei container Docker possono cambiare)
- C’è un load balancer davanti al tuo proxy?
- Usa
docker inspectokubectl get pods -o wideper trovare gli IP reali
”trusted_proxy_loopback_source”
OpenClaw ha rifiutato una richiesta trusted-proxy da sorgente loopback. Controlla:- Il proxy si connette da
127.0.0.1/::1? - Stai cercando di usare l’autenticazione trusted-proxy con un reverse proxy loopback sullo stesso host?
- Usa l’autenticazione token/password per configurazioni proxy loopback sullo stesso host, oppure
- Instrada tramite un indirizzo proxy attendibile non loopback e mantieni quell’IP in
gateway.trustedProxies.
”trusted_proxy_user_missing”
L’header utente era vuoto o mancante. Controlla:- Il tuo proxy è configurato per passare header di identità?
- Il nome dell’header è corretto? (non distingue tra maiuscole e minuscole, ma l’ortografia conta)
- L’utente è effettivamente autenticato sul proxy?
“trustedproxy_missing_header*”
Un header richiesto non era presente. Controlla:- La configurazione del tuo proxy per quegli header specifici
- Se gli header vengono rimossi da qualche parte nella catena
”trusted_proxy_user_not_allowed”
L’utente è autenticato ma non è inallowUsers. Aggiungilo oppure rimuovi la allowlist.
”trusted_proxy_origin_not_allowed”
L’autenticazione trusted-proxy è riuscita, ma l’header browserOrigin non ha superato i controlli di origine della UI di controllo.
Controlla:
gateway.controlUi.allowedOriginsinclude l’origine esatta del browser- Non stai facendo affidamento su origini wildcard a meno che tu non voglia intenzionalmente un comportamento allow-all
- Se usi intenzionalmente la modalità fallback dell’header Host,
gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=trueè impostato deliberatamente
Il WebSocket continua a non funzionare
Assicurati che il tuo proxy:- Supporti gli upgrade WebSocket (
Upgrade: websocket,Connection: upgrade) - Passi gli header di identità sulle richieste di upgrade WebSocket (non solo HTTP)
- Non abbia un percorso auth separato per le connessioni WebSocket
Migrazione dall’autenticazione con token
Se stai passando dall’autenticazione con token a trusted-proxy:- Configura il tuo proxy per autenticare gli utenti e passare gli header
- Testa indipendentemente la configurazione del proxy (curl con header)
- Aggiorna la configurazione OpenClaw con l’autenticazione trusted-proxy
- Riavvia il Gateway
- Testa le connessioni WebSocket dalla UI di controllo
- Esegui
openclaw security audite rivedi i risultati
Correlati
- Sicurezza — guida completa alla sicurezza
- Configurazione — riferimento della configurazione
- Accesso remoto — altri modelli di accesso remoto
- Tailscale — alternativa più semplice per accesso solo tailnet