Gateway
Authentifizierung über vertrauenswürdige Proxys
Wann verwenden
Verwenden Sie den Auth-Modus trusted-proxy, wenn:
- Sie OpenClaw hinter einem identitätsbewussten Proxy betreiben (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 WebSocket-Fehler
1008 unauthorizederhalten, weil Browser keine Tokens in WS-Payloads übergeben können.
Wann NICHT verwenden
- Wenn Ihr Proxy Benutzer nicht authentifiziert (nur ein TLS-Terminator oder Load Balancer ist).
- Wenn es irgendeinen Pfad zum Gateway gibt, der den Proxy umgeht (Firewall-Lücken, interner Netzwerkzugriff).
- Wenn Sie unsicher sind, ob Ihr Proxy weitergeleitete Header korrekt entfernt/überschreibt.
- Wenn Sie nur persönlichen Zugriff für einen einzelnen Benutzer benötigen (ziehen Sie Tailscale Serve + Loopback für eine einfachere Einrichtung in Betracht).
Funktionsweise
Proxy authentifiziert den Benutzer
Ihr Reverse Proxy authentifiziert Benutzer (OAuth, OIDC, SAML usw.).
Proxy fügt einen Identitäts-Header hinzu
Der Proxy fügt einen Header mit der authentifizierten Benutzeridentität hinzu (z. B. x-forwarded-user: [email protected]).
Gateway prüft die vertrauenswürdige Quelle
OpenClaw prüft, ob die Anfrage von einer vertrauenswürdigen Proxy-IP stammt (konfiguriert in gateway.trustedProxies).
Gateway extrahiert die Identität
OpenClaw extrahiert die Benutzeridentität aus dem konfigurierten Header.
Autorisieren
Wenn alle Prüfungen erfolgreich sind, wird die Anfrage autorisiert.
Kopplungsverhalten der Control UI
Wenn gateway.auth.mode = "trusted-proxy" aktiv ist und die Anfrage die trusted-proxy-Prüfungen besteht, können WebSocket-Sitzungen der Control UI ohne Geräte-Kopplungsidentität verbunden werden.
Auswirkungen:
- Die Kopplung ist in diesem Modus nicht mehr das primäre Gate für den Zugriff auf die Control UI.
- Ihre Auth-Richtlinie des Reverse Proxy und
allowUserswerden zur effektiven Zugriffskontrolle. - Beschränken Sie den Gateway-Ingress ausschließlich auf vertrauenswürdige Proxy-IPs (
gateway.trustedProxies+ Firewall).
Konfiguration
{
gateway: {
// Trusted-proxy auth expects requests from a non-loopback trusted proxy source by default
bind: "lan",
// CRITICAL: Only add your proxy's IP(s) here
trustedProxies: ["10.0.0.1", "172.17.0.1"],
auth: {
mode: "trusted-proxy",
trustedProxy: {
// Header containing authenticated user identity (required)
userHeader: "x-forwarded-user",
// Optional: headers that MUST be present (proxy verification)
requiredHeaders: ["x-forwarded-proto", "x-forwarded-host"],
// Optional: restrict to specific users (empty = allow all)
allowUsers: ["[email protected]", "[email protected]"],
// Optional: allow a same-host loopback proxy after explicit opt-in
allowLoopback: false,
},
},
},
}
Konfigurationsreferenz
gateway.trustedProxiesstring[]requiredArray von Proxy-IP-Adressen, denen vertraut werden soll. Anfragen von anderen IPs werden abgelehnt.
gateway.auth.modestringrequiredMuss "trusted-proxy" sein.
gateway.auth.trustedProxy.userHeaderstringrequiredHeader-Name, der die authentifizierte Benutzeridentität enthält.
gateway.auth.trustedProxy.requiredHeadersstring[]Zusätzliche Header, die vorhanden sein müssen, damit der Anfrage vertraut wird.
gateway.auth.trustedProxy.allowUsersstring[]Zulassungsliste von Benutzeridentitäten. Leer bedeutet, dass alle authentifizierten Benutzer zugelassen sind.
gateway.auth.trustedProxy.allowLoopbackbooleanExplizit aktivierbare Unterstützung für Loopback-Reverse-Proxys auf demselben Host. Standardwert ist false.
TLS-Terminierung und HSTS
Verwenden Sie einen TLS-Terminierungspunkt und wenden Sie HSTS dort an.
Proxy-TLS-Terminierung (empfohlen)
Wenn Ihr Reverse Proxy HTTPS für https://control.example.com verarbeitet, setzen Sie Strict-Transport-Security am Proxy für diese Domain.
- Gut geeignet für internetseitige Deployments.
- Hält Zertifikat und HTTP-Härtungsrichtlinie an einem Ort.
- OpenClaw kann hinter dem Proxy auf Loopback-HTTP bleiben.
Beispiel-Header-Wert:
Strict-Transport-Security: max-age=31536000; includeSubDomains
Gateway-TLS-Terminierung
Wenn OpenClaw selbst HTTPS direkt bereitstellt (ohne TLS-terminierenden Proxy), setzen Sie:
{
gateway: {
tls: { enabled: true },
http: {
securityHeaders: {
strictTransportSecurity: "max-age=31536000; includeSubDomains",
},
},
},
}
strictTransportSecurity akzeptiert einen String-Header-Wert oder false, um die Funktion ausdrücklich zu deaktivieren.
Rollout-Leitfaden
- Beginnen Sie zunächst mit einer kurzen maximalen Dauer (zum Beispiel
max-age=300), während Sie den Traffic validieren. - Erhöhen Sie erst dann auf langlebige Werte (zum Beispiel
max-age=31536000), wenn das Vertrauen hoch ist. - Fügen Sie
includeSubDomainsnur hinzu, wenn jede Subdomain HTTPS-bereit ist. - Verwenden Sie Preload nur, wenn Sie die Preload-Anforderungen für Ihren vollständigen Domain-Satz bewusst erfüllen.
- Lokale Entwicklung nur über Loopback profitiert nicht von HSTS.
Beispiele für Proxy-Einrichtung
Pomerium
Pomerium übergibt Identität in x-pomerium-claim-email (oder anderen Claim-Headern) und ein JWT in x-pomerium-jwt-assertion.
{
gateway: {
bind: "lan",
trustedProxies: ["10.0.0.1"], // Pomerium's IP
auth: {
mode: "trusted-proxy",
trustedProxy: {
userHeader: "x-pomerium-claim-email",
requiredHeaders: ["x-pomerium-jwt-assertion"],
},
},
},
}
Pomerium-Konfigurationsausschnitt:
routes:
- from: https://openclaw.example.com
to: http://openclaw-gateway:18789
policy:
- allow:
or:
- email:
is: [email protected]
pass_identity_headers: true
Caddy mit OAuth
Caddy kann mit dem caddy-security-Plugin Benutzer authentifizieren und Identitäts-Header weitergeben.
{
gateway: {
bind: "lan",
trustedProxies: ["10.0.0.1"], // Caddy/sidecar proxy IP
auth: {
mode: "trusted-proxy",
trustedProxy: {
userHeader: "x-forwarded-user",
},
},
},
}
Caddyfile-Ausschnitt:
openclaw.example.com {
authenticate with oauth2_provider
authorize with policy1
reverse_proxy openclaw:18789 {
header_up X-Forwarded-User {http.auth.user.email}
}
}
nginx + oauth2-proxy
oauth2-proxy authentifiziert Benutzer und übergibt die Identität in x-auth-request-email.
{
gateway: {
bind: "lan",
trustedProxies: ["10.0.0.1"], // nginx/oauth2-proxy IP
auth: {
mode: "trusted-proxy",
trustedProxy: {
userHeader: "x-auth-request-email",
},
},
},
}
nginx-Konfigurationsausschnitt:
location / {
auth_request /oauth2/auth;
auth_request_set $user $upstream_http_x_auth_request_email;
proxy_pass http://openclaw:18789;
proxy_set_header X-Auth-Request-Email $user;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
Traefik mit Forward Auth
{
gateway: {
bind: "lan",
trustedProxies: ["172.17.0.1"], // Traefik container IP
auth: {
mode: "trusted-proxy",
trustedProxy: {
userHeader: "x-forwarded-user",
},
},
},
}
Gemischte Token-Konfiguration
OpenClaw lehnt mehrdeutige Konfigurationen ab, bei denen sowohl ein gateway.auth.token (oder OPENCLAW_GATEWAY_TOKEN) als auch der Modus trusted-proxy gleichzeitig aktiv sind. Gemischte Token-Konfigurationen können dazu führen, dass Loopback-Anfragen stillschweigend über den falschen Auth-Pfad authentifiziert werden.
Wenn beim Start ein Fehler mixed_trusted_proxy_token angezeigt wird:
- Entfernen Sie das gemeinsame Token, wenn Sie den trusted-proxy-Modus verwenden, oder
- Wechseln Sie
gateway.auth.modezu"token", wenn Sie tokenbasierte Auth beabsichtigen.
Loopback-trusted-proxy-Identitäts-Header schlagen weiterhin sicher fehl: Aufrufer vom selben Host werden nicht stillschweigend als Proxy-Benutzer authentifiziert. Interne OpenClaw-Aufrufer, die den Proxy umgehen, können sich stattdessen mit gateway.auth.password / OPENCLAW_GATEWAY_PASSWORD authentifizieren. Token-Fallback bleibt im trusted-proxy-Modus absichtlich nicht unterstützt.
Operator-Scopes-Header
Trusted-proxy-Auth ist ein identitätstragender HTTP-Modus, daher können Aufrufer optional Operator-Scopes mit x-openclaw-scopes deklarieren.
Beispiele:
x-openclaw-scopes: operator.readx-openclaw-scopes: operator.read,operator.writex-openclaw-scopes: operator.admin,operator.write
Verhalten:
- Wenn der Header vorhanden ist, berücksichtigt OpenClaw den deklarierten Scope-Satz.
- Wenn der Header vorhanden, aber leer ist, deklariert die Anfrage keine Operator-Scopes.
- Wenn der Header fehlt, fallen normale identitätstragende HTTP-APIs auf den standardmäßigen Operator-Default-Scope-Satz zurück.
- Gateway-Auth-Plugin-HTTP-Routen sind standardmäßig enger gefasst: Wenn
x-openclaw-scopesfehlt, fällt ihr Laufzeit-Scope aufoperator.writezurück. - HTTP-Anfragen aus Browser-Ursprüngen müssen weiterhin
gateway.controlUi.allowedOrigins(oder den bewusst gewählten Host-Header-Fallback-Modus) bestehen, auch nachdem trusted-proxy-Auth erfolgreich war.
Praktische Regel: Senden Sie x-openclaw-scopes explizit, wenn eine trusted-proxy-Anfrage enger sein soll als die Standardwerte oder wenn eine Gateway-Auth-Plugin-Route etwas Stärkeres als Schreib-Scope benötigt.
Sicherheitscheckliste
Prüfen Sie vor dem Aktivieren der Trusted-Proxy-Authentifizierung:
- [ ] Proxy ist der einzige Pfad: Der Gateway-Port ist gegen alles außer Ihrem Proxy per Firewall abgeschirmt.
- [ ] trustedProxies ist minimal: Nur die tatsächlichen IPs Ihres Proxys, keine ganzen Subnetze.
- [ ] Loopback-Proxy-Quelle ist bewusst gewählt: Trusted-Proxy-Authentifizierung schlägt für Anfragen von Loopback-Quellen sicher fehl, sofern
gateway.auth.trustedProxy.allowLoopbacknicht ausdrücklich für einen Proxy auf demselben Host aktiviert ist. - [ ] Proxy entfernt Header: Ihr Proxy überschreibt
x-forwarded-*-Header von Clients, statt sie anzuhängen. - [ ] TLS-Terminierung: Ihr Proxy verarbeitet TLS; Benutzer verbinden sich per HTTPS.
- [ ] allowedOrigins ist explizit: Eine Steuerungsoberfläche außerhalb von Loopback verwendet explizite
gateway.controlUi.allowedOrigins. - [ ] allowUsers ist gesetzt (empfohlen): Beschränken Sie den Zugriff auf bekannte Benutzer, statt alle authentifizierten Personen zuzulassen.
- [ ] Keine gemischte Token-Konfiguration: Legen Sie nicht gleichzeitig
gateway.auth.tokenundgateway.auth.mode: "trusted-proxy"fest. - [ ] Lokaler Passwort-Fallback ist privat: Wenn Sie
gateway.auth.passwordfür interne direkte Aufrufer konfigurieren, schirmen Sie den Gateway-Port per Firewall ab, damit Remote-Clients außerhalb des Proxys ihn nicht direkt erreichen können.
Sicherheits-Audit
openclaw security audit meldet Trusted-Proxy-Authentifizierung mit einem Befund der Schwere kritisch. Das ist beabsichtigt: Es erinnert Sie daran, dass Sie die Sicherheit an Ihre Proxy-Einrichtung delegieren.
Das Audit prüft auf:
- Grundlegende Warnung/kritische Erinnerung
gateway.trusted_proxy_auth - Fehlende
trustedProxies-Konfiguration - Fehlende
userHeader-Konfiguration - Leere
allowUsers(lässt jeden authentifizierten Benutzer zu) - Aktiviertes
allowLoopbackfür Proxy-Quellen auf demselben Host - Platzhalter- oder fehlende Browser-Origin-Richtlinie auf exponierten Oberflächen der Steuerungsoberfläche
Fehlerbehebung
trusted_proxy_untrusted_source
Die Anfrage kam nicht von einer IP in gateway.trustedProxies. Prüfen Sie:
- Ist die Proxy-IP korrekt? (Docker-Container-IPs können sich ändern.)
- Befindet sich vor Ihrem Proxy ein Load Balancer?
- 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-Authentifizierung mit einem Loopback-Reverse-Proxy auf demselben Host zu verwenden?
Behebung:
- Bevorzugen Sie Token-/Passwort-Authentifizierung für interne Clients auf demselben Host, die nicht über den Proxy gehen, oder
- Leiten Sie über eine Nicht-Loopback-Adresse eines vertrauenswürdigen Proxys und behalten Sie diese IP in
gateway.trustedProxies, oder - Setzen Sie für einen bewusst eingesetzten Reverse-Proxy auf demselben Host
gateway.auth.trustedProxy.allowLoopback = true, behalten Sie die Loopback-Adresse ingateway.trustedProxies, und stellen Sie sicher, dass der Proxy Identitäts-Header entfernt oder überschreibt.
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 ist unerheblich, aber die Schreibweise muss stimmen)
- Ist der Benutzer tatsächlich am Proxy 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, befindet sich aber nicht in allowUsers. Fügen Sie ihn entweder hinzu oder entfernen Sie die Allowlist.
trusted_proxy_origin_not_allowed
Trusted-Proxy-Authentifizierung war erfolgreich, aber der Browser-Header Origin hat die Origin-Prüfungen der Steuerungsoberfläche nicht bestanden.
Prüfen Sie:
gateway.controlUi.allowedOriginsenthält die exakte Browser-Origin.- Sie verlassen sich nicht auf Platzhalter-Origins, sofern Sie nicht bewusst ein Verhalten zum Zulassen aller Origins wünschen.
- Wenn Sie bewusst den Host-Header-Fallback-Modus verwenden, ist
gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=trueabsichtlich 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 Authentifizierungspfad für WebSocket-Verbindungen hat.
Migration von Token-Authentifizierung
Wenn Sie von Token-Authentifizierung zu Trusted-Proxy wechseln:
Proxy konfigurieren
Konfigurieren Sie Ihren Proxy so, dass er Benutzer authentifiziert und Header weitergibt.
Proxy unabhängig testen
Testen Sie die Proxy-Einrichtung unabhängig (curl mit Headern).
OpenClaw-Konfiguration aktualisieren
Aktualisieren Sie die OpenClaw-Konfiguration mit Trusted-Proxy-Authentifizierung.
Gateway neu starten
Starten Sie den Gateway neu.
WebSocket testen
Testen Sie WebSocket-Verbindungen von der Steuerungsoberfläche aus.
Audit
Führen Sie openclaw security audit aus und prüfen Sie die Befunde.
Verwandte Themen
- Konfiguration — Konfigurationsreferenz
- Remote-Zugriff — andere Muster für Remote-Zugriff
- Sicherheit — vollständiger Sicherheitsleitfaden
- Tailscale — einfachere Alternative für Zugriff nur innerhalb des Tailnet