Trusted Proxy Auth
⚠️ Sicherheitskritische Funktion. In diesem Modus wird die Authentifizierung vollständig an Ihren Reverse Proxy delegiert. Eine Fehlkonfiguration kann Ihr Gateway unbefugtem Zugriff aussetzen. Lesen Sie diese Seite sorgfältig, bevor Sie sie aktivieren.
Wann verwenden
Verwenden Sie den Auth-Modustrusted-proxy, wenn:
- Sie OpenClaw hinter einem identitätsbewussten Proxy ausführen (Pomerium, Caddy + OAuth, nginx + oauth2-proxy, Traefik + forward auth)
- Ihr Proxy die gesamte Authentifizierung übernimmt und die Benutzeridentität über Header weitergibt
- Sie sich in einer Kubernetes- oder Container-Umgebung befinden, in der der Proxy der einzige Pfad zum Gateway ist
- Sie auf WebSocket-Fehler vom Typ
1008 unauthorizedstoßen, weil Browser keine Tokens in WS-Payloads übergeben können
Wann NICHT verwenden
- Wenn Ihr Proxy Benutzer nicht authentifiziert (nur TLS-Terminator oder Load Balancer)
- Wenn es irgendeinen Pfad zum Gateway gibt, der den Proxy umgeht (Firewall-Lücken, interner Netzwerkzugriff)
- Wenn Sie nicht sicher sind, ob Ihr Proxy weitergeleitete Header korrekt entfernt/überschreibt
- Wenn Sie nur persönlichen Einzelbenutzerzugriff benötigen (für ein einfacheres Setup sollten Sie Tailscale Serve + loopback in Betracht ziehen)
So funktioniert es
- Ihr Reverse Proxy authentifiziert Benutzer (OAuth, OIDC, SAML usw.)
- Der Proxy fügt einen Header mit der authentifizierten Benutzeridentität hinzu (z. B.
x-forwarded-user: nick@example.com) - OpenClaw prüft, ob die Anfrage von einer vertrauenswürdigen Proxy-IP stammt (konfiguriert in
gateway.trustedProxies) - OpenClaw extrahiert die Benutzeridentität aus dem konfigurierten Header
- Wenn alles passt, wird die Anfrage autorisiert
Pairing-Verhalten der Control UI
Wenngateway.auth.mode = "trusted-proxy" aktiv ist und die Anfrage die
Trusted-Proxy-Prüfungen besteht, können WebSocket-Sitzungen der Control UI ohne
Device-Pairing-Identität verbinden.
Auswirkungen:
- Pairing ist in diesem Modus nicht mehr die primäre Schranke für den Zugriff auf die Control UI.
- Ihre Reverse-Proxy-Auth-Richtlinie und
allowUserswerden zur effektiven Zugriffskontrolle. - Halten Sie den Gateway-Ingress strikt auf vertrauenswürdige Proxy-IPs beschränkt (
gateway.trustedProxies+ Firewall).
Konfiguration
- Trusted-Proxy-Auth lehnt Anfragen von loopback-Quellen (
127.0.0.1,::1, loopback-CIDRs) ab. - Reverse Proxys auf demselben Host über loopback erfüllen Trusted-Proxy-Auth nicht.
- Für Proxy-Setups über loopback auf demselben Host verwenden Sie stattdessen Token-/Passwort-Auth oder routen Sie über eine vertrauenswürdige Nicht-Loopback-Proxy-Adresse, die OpenClaw verifizieren kann.
- Nicht-Loopback-Bereitstellungen der Control UI benötigen weiterhin explizite
gateway.controlUi.allowedOrigins.
Konfigurationsreferenz
| Feld | Erforderlich | Beschreibung |
|---|---|---|
gateway.trustedProxies | Ja | Array vertrauenswürdiger Proxy-IP-Adressen. Anfragen von anderen IPs werden abgelehnt. |
gateway.auth.mode | Ja | Muss "trusted-proxy" sein |
gateway.auth.trustedProxy.userHeader | Ja | Header-Name, der die authentifizierte Benutzeridentität enthält |
gateway.auth.trustedProxy.requiredHeaders | Nein | Zusätzliche Header, die vorhanden sein müssen, damit die Anfrage als vertrauenswürdig gilt |
gateway.auth.trustedProxy.allowUsers | Nein | Allowlist von Benutzeridentitäten. Leer bedeutet, alle authentifizierten Benutzer zuzulassen. |
TLS-Terminierung und HSTS
Verwenden Sie einen TLS-Terminierungspunkt und setzen Sie dort HSTS.Empfohlenes Muster: TLS-Terminierung am Proxy
Wenn Ihr Reverse Proxy HTTPS fürhttps://control.example.com verarbeitet, setzen Sie
Strict-Transport-Security am Proxy für diese Domain.
- Geeignet für internetseitig erreichbare Bereitstellungen.
- Hält Zertifikate und HTTP-Härtungsrichtlinien an einem Ort zusammen.
- OpenClaw kann hinter dem Proxy auf loopback-HTTP bleiben.
TLS-Terminierung am Gateway
Wenn OpenClaw HTTPS selbst direkt bereitstellt (kein TLS-terminierender Proxy), setzen Sie:strictTransportSecurity akzeptiert einen Header-Wert als Zeichenfolge oder false, um ihn explizit zu deaktivieren.
Hinweise zum Rollout
- Beginnen Sie zunächst mit einer kurzen Max-Age-Zeit (zum Beispiel
max-age=300), während Sie den Datenverkehr validieren. - Erhöhen Sie auf langlebige Werte (zum Beispiel
max-age=31536000) erst, wenn Sie hohe Sicherheit haben. - Fügen Sie
includeSubDomainsnur hinzu, wenn jede Subdomain für HTTPS bereit ist. - Verwenden Sie Preload nur, wenn Sie die Preload-Anforderungen für Ihre gesamte Domainmenge bewusst erfüllen.
- Rein lokale Entwicklung mit loopback profitiert nicht von HSTS.
Beispiele für Proxy-Setups
Pomerium
Pomerium übergibt Identität inx-pomerium-claim-email (oder anderen Claim-Headern) und ein JWT in x-pomerium-jwt-assertion.
Caddy mit OAuth
Caddy mit dem Plugincaddy-security kann Benutzer authentifizieren und Identitäts-Header weitergeben.
nginx + oauth2-proxy
oauth2-proxy authentifiziert Benutzer und übergibt Identität inx-auth-request-email.
Traefik mit Forward Auth
Gemischte Token-Konfiguration
OpenClaw lehnt mehrdeutige Konfigurationen ab, bei denen gleichzeitiggateway.auth.token (oder OPENCLAW_GATEWAY_TOKEN) und der Modus trusted-proxy aktiv sind. Gemischte Token-Konfigurationen können dazu führen, dass loopback-Anfragen stillschweigend über den falschen Auth-Pfad authentifiziert werden.
Wenn beim Start der Fehler mixed_trusted_proxy_token angezeigt wird:
- Entfernen Sie das gemeinsame Token, wenn Sie den Modus
trusted-proxyverwenden, oder - wechseln Sie
gateway.auth.modezu"token", wenn Sie tokenbasierte Authentifizierung beabsichtigen.
Header für Operator-Scopes
Trusted-Proxy-Auth ist ein identitätstragender HTTP-Modus, daher können Aufrufer optional Operator-Scopes mitx-openclaw-scopes deklarieren.
Beispiele:
x-openclaw-scopes: operator.readx-openclaw-scopes: operator.read,operator.writex-openclaw-scopes: operator.admin,operator.write
- Wenn der Header vorhanden ist, berücksichtigt OpenClaw die deklarierte Scope-Menge.
- Wenn der Header vorhanden, aber leer ist, deklariert die Anfrage keine Operator-Scopes.
- Wenn der Header fehlt, greifen normale identitätstragende HTTP-APIs auf die Standardmenge der Operator-Default-Scopes zurück.
- Gateway-auth-Plugin-HTTP-Routen sind standardmäßig enger: Wenn
x-openclaw-scopesfehlt, fällt ihr Laufzeit-Scope aufoperator.writezurück. - HTTP-Anfragen aus dem Browser müssen auch nach erfolgreicher Trusted-Proxy-Auth weiterhin
gateway.controlUi.allowedOriginsbestehen (oder den bewusst aktivierten Host-Header-Fallback-Modus).
- Senden Sie
x-openclaw-scopesexplizit, wenn eine Trusted-Proxy-Anfrage enger sein soll als die Standardwerte oder wenn eine Gateway-auth-Plugin-Route etwas Stärkeres als den Write-Scope benötigt.
Sicherheits-Checkliste
Bevor Sie Trusted-Proxy-Auth aktivieren, prüfen Sie Folgendes:- Der Proxy ist der einzige Pfad: Der Gateway-Port ist gegenüber allem außer Ihrem Proxy durch eine Firewall geschützt
- trustedProxies ist minimal: Nur die tatsächlichen IPs Ihres Proxys, nicht ganze Subnetze
- Keine Proxy-Quelle über loopback: Trusted-Proxy-Auth schlägt bei Anfragen von loopback-Quellen sicher fehl
- Proxy entfernt Header: Ihr Proxy überschreibt (statt anzuhängen)
x-forwarded-*-Header von Clients - TLS-Terminierung: Ihr Proxy verarbeitet TLS; Benutzer verbinden sich über HTTPS
- allowedOrigins ist explizit: Nicht-Loopback-Control-UI verwendet explizite
gateway.controlUi.allowedOrigins - allowUsers ist gesetzt (empfohlen): Auf bekannte Benutzer beschränken, statt jeden authentifizierten Benutzer zuzulassen
- Keine gemischte Token-Konfiguration: Setzen Sie nicht gleichzeitig
gateway.auth.tokenundgateway.auth.mode: "trusted-proxy"
Security Audit
openclaw security audit markiert Trusted-Proxy-Auth mit einem Befund der Schwere critical. Das ist beabsichtigt — es erinnert daran, dass Sie die Sicherheit an Ihr Proxy-Setup delegieren.
Das Audit prüft auf:
- Basiswarnung/-erinnerung
gateway.trusted_proxy_authmit warning/critical - Fehlende Konfiguration von
trustedProxies - Fehlende Konfiguration von
userHeader - Leeres
allowUsers(erlaubt jeden authentifizierten Benutzer) - Wildcard- oder fehlende Browser-Origin-Richtlinie auf exponierten Oberflächen der Control UI
Fehlerbehebung
trusted_proxy_untrusted_source
Die Anfrage stammt nicht von einer IP in gateway.trustedProxies. Prüfen Sie:
- Ist die Proxy-IP korrekt? (Docker-Container-IPs können sich ändern)
- Befindet sich ein Load Balancer vor Ihrem Proxy?
- Verwenden Sie
docker inspectoderkubectl get pods -o wide, um die tatsächlichen IPs zu finden
trusted_proxy_loopback_source
OpenClaw hat eine Trusted-Proxy-Anfrage von einer loopback-Quelle abgelehnt.
Prüfen Sie:
- Verbindet sich der Proxy von
127.0.0.1/::1? - Versuchen Sie, Trusted-Proxy-Auth mit einem Reverse Proxy über loopback auf demselben Host zu verwenden?
- Verwenden Sie Token-/Passwort-Auth für Proxy-Setups über loopback auf demselben Host, oder
- routen Sie über eine vertrauenswürdige Nicht-Loopback-Proxy-Adresse und behalten Sie diese IP in
gateway.trustedProxies.
trusted_proxy_user_missing
Der Benutzer-Header war leer oder fehlte. Prüfen Sie:
- Ist Ihr Proxy so konfiguriert, dass er Identitäts-Header weitergibt?
- Ist der Header-Name korrekt? (Groß-/Kleinschreibung spielt keine Rolle, die Schreibweise aber schon)
- Ist der Benutzer am Proxy tatsächlich authentifiziert?
trusted*proxy_missing_header*\*
Ein erforderlicher Header war nicht vorhanden. Prüfen Sie:
- Ihre Proxy-Konfiguration für diese spezifischen Header
- Ob Header irgendwo in der Kette entfernt werden
trusted_proxy_user_not_allowed
Der Benutzer ist authentifiziert, aber nicht in allowUsers. Fügen Sie ihn hinzu oder entfernen Sie die Allowlist.
trusted_proxy_origin_not_allowed
Trusted-Proxy-Auth war erfolgreich, aber der Browser-Header Origin hat die Origin-Prüfungen der Control UI nicht bestanden.
Prüfen Sie:
gateway.controlUi.allowedOriginsenthält den exakten Browser-Origin- Sie verlassen sich nicht auf Wildcard-Origins, außer wenn Sie absichtlich ein Allow-all-Verhalten möchten
- Wenn Sie bewusst den Host-Header-Fallback-Modus verwenden, ist
gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=trueausdrücklich gesetzt
WebSocket schlägt weiterhin fehl
Stellen Sie sicher, dass Ihr Proxy:- WebSocket-Upgrades unterstützt (
Upgrade: websocket,Connection: upgrade) - die Identitäts-Header bei WebSocket-Upgrade-Anfragen weitergibt (nicht nur bei HTTP)
- keinen separaten Auth-Pfad für WebSocket-Verbindungen hat
Migration von Token-Auth
Wenn Sie von Token-Auth zu Trusted-Proxy wechseln:- Konfigurieren Sie Ihren Proxy so, dass er Benutzer authentifiziert und Header weitergibt
- Testen Sie das Proxy-Setup unabhängig (curl mit Headern)
- Aktualisieren Sie die OpenClaw-Konfiguration mit Trusted-Proxy-Auth
- Starten Sie das Gateway neu
- Testen Sie WebSocket-Verbindungen aus der Control UI
- Führen Sie
openclaw security auditaus und prüfen Sie die Befunde
Verwandt
- Security — vollständiger Sicherheitsleitfaden
- Configuration — Konfigurationsreferenz
- Remote Access — andere Muster für Remote-Zugriff
- Tailscale — einfachere Alternative für Tailnet-only-Zugriff