Wanneer te gebruiken
- Je voert OpenClaw uit achter een identiteitsbewuste proxy (Pomerium, Caddy + OAuth, nginx + oauth2-proxy, Traefik + forward auth).
- Je proxy verzorgt alle authenticatie en geeft de gebruikersidentiteit door via headers.
- Je bevindt je in een Kubernetes- of containeromgeving waarin de proxy het enige pad naar de Gateway is.
- Je krijgt WebSocket-fouten met
1008 unauthorizedomdat browsers geen tokens in WS-payloads kunnen doorgeven.
Wanneer NIET te gebruiken
- Je proxy authenticeert geen gebruikers (maar is alleen een TLS-terminator of loadbalancer).
- Er is een pad naar de Gateway dat de proxy omzeilt (gaten in de firewall, toegang via het interne netwerk).
- Je weet niet zeker of je proxy doorgestuurde headers correct verwijdert/overschrijft.
- Je hebt alleen persoonlijke toegang voor één gebruiker nodig (overweeg in plaats daarvan Tailscale Serve + loopback).
Hoe het werkt
Proxy authenticeert de gebruiker
Proxy voegt een identiteitsheader toe
x-forwarded-user: nick@example.com).Gateway verifieert de vertrouwde bron
gateway.trustedProxies) en niet van het eigen loopback- of lokale-interfaceadres van de Gateway.Gateway extraheert de identiteit
Autoriseren
allowUsers (indien ingesteld), wordt het verzoek geautoriseerd.Configuratie
Configuratiereferentie
"trusted-proxy" zijn.operator.admin expliciet op te nemen, kan elke via de proxy geauthenticeerde gebruiker automatisch volledige beheerderstoegang voor een apparaat aanvragen, krijgen verzoeken zonder scopes automatisch volledige beheerderstoegang en wordt de KRITIEKE beveiligingsbevinding gateway.trusted_proxy_device_auto_approve_admin geactiveerd, plus een waarschuwing bij het opstarten van de Gateway.Automatische apparaatgoedkeuring
Authenticatie via een vertrouwde proxy kan optioneel de proxy-identiteit gebruiken als goedkeuringsgrens voor nieuwe browserapparaten:enabled: false. Wanneer deze optie is ingeschakeld, gelden al deze regels:
- De WebSocket moet zijn geauthenticeerd via de methode
trusted-proxymet een niet-lege gebruikersidentiteit die voldoet aanallowUserswanneer een toestaanlijst is geconfigureerd. Verbindingen via een token, wachtwoord of Tailscale en niet-geauthenticeerde verbindingen gebruiken dit beleid nooit. - Alleen een nieuw browserapparaat voor Control UI of WebChat kan automatisch worden goedgekeurd. Elk verzoek voor een bestaand apparaat, waaronder een scope-uitbreiding, blijft in afwachting van handmatige goedkeuring met
openclaw devices approve <requestId>. - Het apparaat wordt goedgekeurd met de rol
operator. Als het verbindingsverzoek scopes bevat, is de toekenning exact de doorsnede van de aangevraagde scopes endeviceAutoApprove.scopes. Als het verzoek geen scopes bevat, wordt de geconfigureerde lijst toegekend; wanneer die lijst ontbreekt, bestaat de standaard uitoperator.read,operator.writeenoperator.approvals. De resulterende toekenning wordt vervolgens verder beperkt door de proxyheaderx-openclaw-scopesvan de verbinding, indien aanwezig. Een proxy die de scopes van een gebruiker beperkt, beperkt daarmee dus ook de permanente apparaattoekenning en niet alleen de sessie — een aanwezige maar lege header levert geen scopes op. Deze beperking geldt ook wanneer de client zijn eigen scopelijst weglaat. operator.adminis alleen toegestaan wanneer het expliciet indeviceAutoApprove.scopesstaat. Als het daarin staat, kan elke via de proxy geauthenticeerde gebruiker volledige beheerderstoegang voor een nieuw browserapparaat aanvragen en automatisch ontvangen; verzoeken zonder scopes krijgen automatisch volledige beheerderstoegang.openclaw security auditrapporteert de KRITIEKE bevindinggateway.trusted_proxy_device_auto_approve_adminen de Gateway registreert bij het opstarten eenmaal een waarschuwing. Geef de voorkeur aan handmatige goedkeuring voor beheerderstoegang metopenclaw devices approveofopenclaw devices rotatetotdat rollen per identiteit beschikbaar zijn.
Koppelingsgedrag van Control UI
Wanneergateway.auth.mode = "trusted-proxy" actief is en het verzoek de controles voor een vertrouwde proxy doorstaat, kunnen Control UI-WebSocket-sessies verbinding maken zonder identiteit voor apparaatkoppeling.
Gevolgen voor scopes:
- Control UI-WebSocket-sessies zonder apparaat maken verbinding, maar ontvangen standaard geen operatorscopes. OpenClaw wist de lijst met aangevraagde scopes naar
[], zodat een sessie die niet aan een goedgekeurd gekoppeld apparaat/token is gebonden, niet zelf machtigingen kan declareren. - Als methoden na een geslaagde WebSocket-verbinding mislukken met
missing scope, gebruik dan HTTPS zodat de browser een apparaatidentiteit kan genereren en de koppeling kan voltooien. Zie onveilige HTTP voor Control UI. - Oudere configuraties die nog steeds de uitgefaseerde sleutel
gateway.controlUi.dangerouslyDisableDeviceAuth=truebevatten, gebruiken de begrensde upgrademigratie voor Control UI.
x-openclaw-scopes verzendt bij het upgradeverzoek voor de Control UI-WebSocket, beperkt OpenClaw de sessiescopes tot de doorsnede van de aangevraagde scopes en de gedeclareerde scopes. Deze header kent geen scopes toe, maar beperkt alleen welke scopes de sessie kan bevatten. Wanneer deviceAutoApprove.enabled waar is, geldt dezelfde beperking ook voor de permanente apparaattoekenning die door automatische apparaatgoedkeuring wordt geschreven, zodat een automatisch goedgekeurd apparaat nooit meer scopes bevat dan de proxy heeft gedeclareerd.
Gevolgen:
- Koppeling is niet langer de primaire toegangscontrole voor Control UI-toegang zonder apparaat. Wanneer
deviceAutoApprove.enabledwaar is, wordt de proxy-identiteit ook de goedkeuringscontrole voor de registratie van nieuwe browserapparaten. - Het authenticatiebeleid van je reverse proxy en
allowUsersvormen de effectieve toegangscontrole. - Beperk inkomend Gateway-verkeer uitsluitend tot vertrouwde proxy-IP-adressen (
gateway.trustedProxies+ firewall).
client.mode: "backend"-clients of clients in CLI-vorm. Aangepaste automatisering moet
apparaatidentiteit/koppeling, het gereserveerde directe lokale backend-helperpad client.id: "gateway-client"
of de Plugin voor HTTP-RPC voor beheerders
gebruiken wanneer een HTTP-verzoek/antwoordinterface geschikter is.
Header voor operatorscopes
Trusted-proxy-authenticatie is een identiteitsdragende HTTP-modus, zodat aanroepers optioneel operatorbereiken kunnen opgeven metx-openclaw-scopes bij HTTP API-aanvragen.
Opmerking: WebSocket-bereiken worden bepaald door de Gateway-protocolhandshake en de koppeling van de apparaatidentiteit. Bij WebSocket-upgradeaanvragen van de Control UI is x-openclaw-scopes alleen een bovengrens voor de onderhandelde sessiebereiken, geen toekenning. Zie Koppelingsgedrag van de Control UI.
Voorbeelden:
x-openclaw-scopes: operator.readx-openclaw-scopes: operator.read,operator.writex-openclaw-scopes: operator.admin,operator.write
- Wanneer de header aanwezig is, respecteert OpenClaw de opgegeven verzameling bereiken.
- Wanneer de header aanwezig maar leeg is, geeft de aanvraag geen operatorbereiken op.
- Wanneer de header ontbreekt, vallen normale identiteitsdragende HTTP API’s terug op de standaardverzameling operatorbereiken (
operator.admin,operator.read,operator.write,operator.approvals,operator.pairing,operator.talk.secrets). - Door Gateway-authenticatie beveiligde Plugin-HTTP-routes zijn standaard beperkter: wanneer
x-openclaw-scopesontbreekt, valt hun runtimebereik alleen terug opoperator.write. - HTTP-aanvragen vanuit een browserorigin moeten nog steeds slagen voor
gateway.controlUi.allowedOrigins(of de bewuste terugvalmodus met de Host-header), zelfs nadat trusted-proxy-authenticatie is geslaagd.
x-openclaw-scopes expliciet wanneer je een trusted-proxy-aanvraag beperkter wilt maken dan de standaardwaarden, of wanneer een door gateway-authenticatie beveiligde Plugin-route iets sterkers dan schrijfbereik nodig heeft.
TLS-beëindiging en HSTS
Gebruik één TLS-beëindigingspunt en pas HSTS daar toe.- TLS-beëindiging bij de proxy (aanbevolen)
- TLS-beëindiging bij de Gateway
https://control.example.com afhandelt, stel je Strict-Transport-Security bij de proxy voor dat domein in.- Geschikt voor implementaties die via internet bereikbaar zijn.
- Houdt het certificaat- en HTTP-beveiligingsbeleid op één plek.
- OpenClaw kan achter de proxy op loopback-HTTP blijven.
Richtlijnen voor de uitrol
- Begin eerst met een korte maximale leeftijd (bijvoorbeeld
max-age=300) terwijl je het verkeer valideert. - Verhoog deze pas naar langdurige waarden (bijvoorbeeld
max-age=31536000) wanneer je voldoende vertrouwen hebt. - Voeg
includeSubDomainsalleen toe als elk subdomein gereed is voor HTTPS. - Gebruik preload alleen als je bewust aan de preloadvereisten voor je volledige verzameling domeinen voldoet.
- Lokale ontwikkeling die uitsluitend loopback gebruikt, heeft geen baat bij HSTS.
Voorbeelden van proxyconfiguraties
Pomerium
Pomerium
x-pomerium-claim-email (of andere claimheaders) en een JWT in x-pomerium-jwt-assertion.Caddy met OAuth
Caddy met OAuth
caddy-security kan gebruikers authenticeren en identiteitsheaders doorgeven.nginx + oauth2-proxy
nginx + oauth2-proxy
x-auth-request-email.Traefik met forward-authenticatie
Traefik met forward-authenticatie
Gemengde tokenconfiguratie
Bij het starten weigert de Gateway trusted-proxy-authenticatie als er ook een gedeeld token is geconfigureerd (gateway.auth.token of OPENCLAW_GATEWAY_TOKEN). Deze twee sluiten elkaar uit, omdat een gedeeld token aanroepers op dezelfde host in staat zou stellen zich te authenticeren via een volledig ander pad dan de door de proxy geverifieerde identiteit die deze modus hoort af te dwingen.
Als het starten mislukt met een fout zoals gateway auth mode is trusted-proxy, but a shared token is also configured:
- Verwijder het gedeelde token wanneer je de trusted-proxy-modus gebruikt, of
- Wijzig
gateway.auth.modein"token"als je tokengebaseerde authenticatie wilt gebruiken.
gateway.auth.password / OPENCLAW_GATEWAY_PASSWORD. Terugvallen op een token blijft bewust niet ondersteund in de trusted-proxy-modus.
Beveiligingschecklist
Controleer het volgende voordat je trusted-proxy-authenticatie inschakelt:- De proxy is het enige pad: De Gateway-poort is voor alles behalve je proxy door een firewall afgeschermd.
- trustedProxies is minimaal: Alleen de daadwerkelijke IP-adressen van je proxy, niet volledige subnetten.
- Een loopback-proxybron is een bewuste keuze: trusted-proxy-authenticatie weigert standaard aanvragen van een loopback-bron, tenzij
gateway.auth.trustedProxy.allowLoopbackexpliciet is ingeschakeld voor een proxy op dezelfde host. - De proxy verwijdert headers: Je proxy overschrijft
x-forwarded-*-headers van clients (en voegt er niet aan toe). - TLS-beëindiging: Je proxy handelt TLS af; gebruikers maken verbinding via HTTPS.
- allowedOrigins is expliciet: De Control UI buiten loopback gebruikt expliciete
gateway.controlUi.allowedOrigins. - allowUsers is ingesteld (aanbevolen): Beperk de toegang tot bekende gebruikers in plaats van iedereen met geldige authenticatie toe te laten.
- Geen gemengde tokenconfiguratie: Stel niet zowel
gateway.auth.tokenalsgateway.auth.mode: "trusted-proxy"in. - Lokale terugval op een wachtwoord is privé: Als je
gateway.auth.passwordconfigureert voor rechtstreekse interne aanroepers, houd je de Gateway-poort door een firewall afgeschermd zodat externe clients buiten de proxy deze niet rechtstreeks kunnen bereiken. - Automatische goedkeuring van apparaten is een bewuste keuze: Als
deviceAutoApprove.enabledwaar is, beschouw je de accountbeveiliging van de reverse proxy als de grens voor apparaatregistratie en houd je de lijst met toegekende bereiken minimaal en zonder beheerdersrechten.
Beveiligingsaudit
openclaw security audit markeert trusted-proxy-authenticatie met een bevinding van kritieke ernst. Dit is opzettelijk; het herinnert je eraan dat je de beveiliging aan je proxyconfiguratie delegeert.
De audit controleert op:
- Algemene waarschuwing/kritieke herinnering voor
gateway.trusted_proxy_auth. - Ontbrekende configuratie voor
trustedProxies. - Ontbrekende configuratie voor
userHeader. - Lege
allowUsers(staat elke geauthenticeerde gebruiker toe). - Ingeschakelde
allowLoopbackvoor proxybronnen op dezelfde host. - Ingeschakelde automatische goedkeuring van browserapparaten (delegeert de koppeling van nieuwe apparaten aan de proxy-identiteit).
gateway.controlUi.allowedOrigins, en terugval op de origin van de Host-header.
Problemen oplossen
trusted_proxy_untrusted_source
trusted_proxy_untrusted_source
gateway.trustedProxies. Controleer het volgende:- Klopt het IP-adres van de proxy? (IP-adressen van Docker-containers kunnen veranderen.)
- Staat er een load balancer vóór je proxy?
- Gebruik
docker inspectofkubectl get pods -o wideom de daadwerkelijke IP-adressen te vinden.
trusted_proxy_loopback_source
trusted_proxy_loopback_source
- Maakt de proxy verbinding vanaf
127.0.0.1/::1? - Probeer je trusted-proxy-authenticatie te gebruiken met een loopback-reverse-proxy op dezelfde host?
- Gebruik bij voorkeur token-/wachtwoordauthenticatie voor interne clients op dezelfde host die niet via de proxy gaan, of
- Leid het verkeer via een vertrouwd proxyadres dat geen loopback-adres is en houd dat IP-adres in
gateway.trustedProxies, of - Stel voor een bewust gebruikte reverse proxy op dezelfde host
gateway.auth.trustedProxy.allowLoopback = truein, houd het loopback-adres ingateway.trustedProxiesen zorg ervoor dat de proxy identiteitsheaders verwijdert of overschrijft.
trusted_proxy_local_interface_source / trusted_proxy_local_interface_check_failed
trusted_proxy_local_interface_source / trusted_proxy_local_interface_check_failed
..._check_failed betekent dat tijdens de detectie van interfaces zelf een fout is opgetreden, zodat OpenClaw standaard weigert.Controleer het volgende:- Verstuurt een proces op de Gateway-host zelf rechtstreeks identiteitsheaders en omzeilt het daarbij de proxy?
- Draait de proxy in dezelfde netwerknaamruimte als de Gateway, met een IP-adres dat ook als lokale interface wordt weergegeven?
allowLoopback alleen voor een echte proxyconfiguratie op dezelfde host.trusted_proxy_user_missing
trusted_proxy_user_missing
- Is je proxy geconfigureerd om identiteitsheaders door te geven?
- Klopt de naam van de header? (niet hoofdlettergevoelig, maar de spelling moet kloppen)
- Is de gebruiker daadwerkelijk bij de proxy geauthenticeerd?
trusted_proxy_missing_header_*
trusted_proxy_missing_header_*
- De configuratie van je proxy voor die specifieke headers.
- Of headers ergens in de keten worden verwijderd.
trusted_proxy_user_not_allowed
trusted_proxy_user_not_allowed
allowUsers. Voeg de gebruiker toe of verwijder de toelatingslijst.trusted_proxy_no_proxies_configured / trusted_proxy_config_missing
trusted_proxy_no_proxies_configured / trusted_proxy_config_missing
gateway.auth.mode is "trusted-proxy", maar gateway.trustedProxies is leeg, of gateway.auth.trustedProxy zelf ontbreekt. Elk verzoek wordt geweigerd totdat beide zijn ingesteld.trusted_proxy_origin_not_allowed
trusted_proxy_origin_not_allowed
Origin doorstond de oorsprongscontroles van de Control UI niet.Controleer het volgende:gateway.controlUi.allowedOriginsbevat de exacte browseroorsprong.- Je vertrouwt niet op jokertekenoorsprongen, tenzij je bewust alles wilt toestaan.
- Als je bewust de terugvalmodus met de Host-header gebruikt, is
gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=truedoelbewust ingesteld.
Verbinding slaagt, maar methoden melden een ontbrekend bereik
Verbinding slaagt, maar methoden melden een ontbrekend bereik
chat.history, sessions.list of
models.list mislukt met missing scope: operator.read.Veelvoorkomende oorzaken:- Control UI-sessie zonder apparaat: authenticatie via een vertrouwde proxy kan de WebSocket-verbinding toelaten zonder apparaatidentiteit, maar OpenClaw wist ontworpen gedrag de bereiken van sessies zonder apparaat.
- Aangepaste backendclient: de uitgefaseerde upgrade-invoer van de Control UI verleent nooit toegang aan willekeurige backendclients of WebSocket-clients in CLI-vorm.
- Te beperkte
x-openclaw-scopes: als je proxy deze header injecteert in het WebSocket-upgradeverzoek van de Control UI, worden de sessiebereiken tot die verzameling beperkt. Een lege headerwaarde levert geen bereiken op.
- Gebruik voor de Control UI HTTPS, zodat de browser een apparaatidentiteit kan genereren en de koppeling kan voltooien.
- Gebruik voor aangepaste automatisering apparaatidentiteit/koppeling, het gereserveerde directe lokale backend-helperpad
gateway-clientof HTTP-RPC voor beheerders. - Voeg de uitgefaseerde sleutel
gateway.controlUi.dangerouslyDisableDeviceAuthniet toe aan de huidige configuratie. Oudere installaties gebruiken automatisch de eenmalige migratie voor zelfkoppeling.
WebSocket werkt nog steeds niet
WebSocket werkt nog steeds niet
- WebSocket-upgrades ondersteunt (
Upgrade: websocket,Connection: upgrade). - De identiteitsheaders doorgeeft bij WebSocket-upgradeverzoeken (niet alleen bij HTTP).
- Geen afzonderlijk authenticatiepad voor WebSocket-verbindingen heeft.
Migratie vanaf tokenauthenticatie
De proxy configureren
De proxy afzonderlijk testen
De OpenClaw-configuratie bijwerken
De Gateway opnieuw starten
WebSocket testen
Controleren
openclaw security audit uit en beoordeel de bevindingen.Gerelateerd
- Configuratie — configuratiereferentie
- Operatorbereiken — rollen, bereiken en goedkeuringscontroles
- Externe toegang — andere patronen voor externe toegang
- Beveiliging — volledige beveiligingshandleiding
- Tailscale — eenvoudiger alternatief voor toegang uitsluitend via het tailnet