Trusted Proxy Auth
⚠️ Funkcja wrażliwa na bezpieczeństwo. Ten tryb całkowicie deleguje uwierzytelnianie do reverse proxy. Błędna konfiguracja może narazić Twój Gateway na nieautoryzowany dostęp. Przeczytaj uważnie tę stronę przed włączeniem.
Kiedy używać
Użyj trybu uwierzytelnianiatrusted-proxy, gdy:
- Uruchamiasz OpenClaw za proxy świadomym tożsamości (Pomerium, Caddy + OAuth, nginx + oauth2-proxy, Traefik + forward auth)
- Twoje proxy obsługuje całe uwierzytelnianie i przekazuje tożsamość użytkownika przez nagłówki
- Jesteś w środowisku Kubernetes lub kontenerowym, gdzie proxy jest jedyną drogą do Gateway
- Trafiasz na błędy WebSocket
1008 unauthorized, ponieważ przeglądarki nie mogą przekazywać tokenów w ładunkach WS
Kiedy NIE używać
- Jeśli Twoje proxy nie uwierzytelnia użytkowników (jest tylko terminatorem TLS lub load balancerem)
- Jeśli istnieje jakakolwiek ścieżka do Gateway, która omija proxy (dziury w firewallu, dostęp przez sieć wewnętrzną)
- Jeśli nie masz pewności, czy Twoje proxy poprawnie usuwa/nadpisuje przekazywane nagłówki
- Jeśli potrzebujesz tylko osobistego dostępu dla pojedynczego użytkownika (rozważ Tailscale Serve + loopback dla prostszej konfiguracji)
Jak to działa
- Twoje reverse proxy uwierzytelnia użytkowników (OAuth, OIDC, SAML itd.)
- Proxy dodaje nagłówek z tożsamością uwierzytelnionego użytkownika (np.
x-forwarded-user: nick@example.com) - OpenClaw sprawdza, czy żądanie pochodzi z zaufanego adresu IP proxy (skonfigurowanego w
gateway.trustedProxies) - OpenClaw wyodrębnia tożsamość użytkownika ze skonfigurowanego nagłówka
- Jeśli wszystko się zgadza, żądanie zostaje autoryzowane
Zachowanie parowania w Control UI
Gdygateway.auth.mode = "trusted-proxy" jest aktywne i żądanie przejdzie
kontrole trusted-proxy, sesje WebSocket Control UI mogą łączyć się bez
tożsamości parowania urządzenia.
Konsekwencje:
- Parowanie nie jest już główną bramką dostępu do Control UI w tym trybie.
- Polityka uwierzytelniania Twojego reverse proxy i
allowUsersstają się skuteczną kontrolą dostępu. - Utrzymuj ingress gateway zablokowany wyłącznie do zaufanych adresów IP proxy (
gateway.trustedProxies+ firewall).
Konfiguracja
- Uwierzytelnianie trusted-proxy odrzuca żądania ze źródła loopback (
127.0.0.1,::1, zakresy CIDR loopback). - Reverse proxy loopback na tym samym hoście nie spełniają wymagań uwierzytelniania trusted-proxy.
- Dla konfiguracji proxy loopback na tym samym hoście użyj zamiast tego uwierzytelniania tokenem/hasłem albo kieruj ruch przez zaufany adres proxy spoza loopback, który OpenClaw może zweryfikować.
- Wdrożenia Control UI spoza loopback nadal wymagają jawnego
gateway.controlUi.allowedOrigins.
Dokumentacja konfiguracji
| Pole | Wymagane | Opis |
|---|---|---|
gateway.trustedProxies | Tak | Tablica adresów IP proxy, którym można ufać. Żądania z innych adresów IP są odrzucane. |
gateway.auth.mode | Tak | Musi mieć wartość "trusted-proxy" |
gateway.auth.trustedProxy.userHeader | Tak | Nazwa nagłówka zawierającego tożsamość uwierzytelnionego użytkownika |
gateway.auth.trustedProxy.requiredHeaders | Nie | Dodatkowe nagłówki, które muszą być obecne, aby żądanie było zaufane |
gateway.auth.trustedProxy.allowUsers | Nie | Allowlista tożsamości użytkowników. Puste oznacza zezwolenie wszystkim uwierzytelnionym użytkownikom. |
Terminacja TLS i HSTS
Użyj jednego punktu terminacji TLS i zastosuj tam HSTS.Zalecany wzorzec: terminacja TLS na proxy
Gdy Twoje reverse proxy obsługuje HTTPS dlahttps://control.example.com, ustaw
Strict-Transport-Security na proxy dla tej domeny.
- Dobre dopasowanie do wdrożeń wystawionych do internetu.
- Utrzymuje certyfikat i politykę utwardzania HTTP w jednym miejscu.
- OpenClaw może pozostać na HTTP loopback za proxy.
Terminacja TLS w Gateway
Jeśli sam OpenClaw bezpośrednio udostępnia HTTPS (bez proxy terminującego TLS), ustaw:strictTransportSecurity akceptuje wartość nagłówka jako ciąg albo false, aby jawnie wyłączyć.
Wskazówki wdrożeniowe
- Zacznij najpierw od krótkiego
max-age(na przykładmax-age=300) podczas weryfikacji ruchu. - Zwiększ do długotrwałych wartości (na przykład
max-age=31536000) dopiero wtedy, gdy poziom pewności będzie wysoki. - Dodaj
includeSubDomainstylko wtedy, gdy każda subdomena jest gotowa na HTTPS. - Używaj preload tylko wtedy, gdy celowo spełniasz wymagania preload dla pełnego zestawu swoich domen.
- Lokalny development tylko na loopback nie korzysta z HSTS.
Przykłady konfiguracji proxy
Pomerium
Pomerium przekazuje tożsamość wx-pomerium-claim-email (lub innych nagłówkach claim) oraz JWT w x-pomerium-jwt-assertion.
Caddy z OAuth
Caddy z pluginemcaddy-security może uwierzytelniać użytkowników i przekazywać nagłówki tożsamości.
nginx + oauth2-proxy
oauth2-proxy uwierzytelnia użytkowników i przekazuje tożsamość wx-auth-request-email.
Traefik z Forward Auth
Mieszana konfiguracja tokenów
OpenClaw odrzuca niejednoznaczne konfiguracje, w których zarównogateway.auth.token (lub OPENCLAW_GATEWAY_TOKEN), jak i tryb trusted-proxy są aktywne jednocześnie. Mieszane konfiguracje tokenów mogą powodować, że żądania loopback będą po cichu uwierzytelniane niewłaściwą ścieżką uwierzytelniania.
Jeśli przy uruchamianiu widzisz błąd mixed_trusted_proxy_token:
- Usuń współdzielony token, gdy używasz trybu trusted-proxy, albo
- Przełącz
gateway.auth.modena"token", jeśli zamierzasz używać uwierzytelniania tokenem.
Nagłówek zakresów operatora
Uwierzytelnianie trusted-proxy to tryb HTTP niosący tożsamość, więc wywołujący mogą opcjonalnie deklarować zakresy operatora za pomocąx-openclaw-scopes.
Przykłady:
x-openclaw-scopes: operator.readx-openclaw-scopes: operator.read,operator.writex-openclaw-scopes: operator.admin,operator.write
- Gdy nagłówek jest obecny, OpenClaw honoruje zadeklarowany zestaw zakresów.
- Gdy nagłówek jest obecny, ale pusty, żądanie deklaruje brak zakresów operatora.
- Gdy nagłówek jest nieobecny, zwykłe interfejsy API HTTP niosące tożsamość wracają do standardowego domyślnego zestawu zakresów operatora.
- Trasy HTTP pluginów gateway-auth są domyślnie węższe: gdy
x-openclaw-scopesjest nieobecny, ich zakres środowiska uruchomieniowego wraca dooperator.write. - Żądania HTTP pochodzące z przeglądarki nadal muszą przejść
gateway.controlUi.allowedOrigins(lub zamierzony tryb fallbacku nagłówka Host) nawet po pomyślnym uwierzytelnieniu trusted-proxy.
- Wysyłaj
x-openclaw-scopesjawnie, gdy chcesz, aby żądanie trusted-proxy było węższe niż wartości domyślne, albo gdy trasa pluginu gateway-auth potrzebuje czegoś silniejszego niż zakres write.
Lista kontrolna bezpieczeństwa
Przed włączeniem uwierzytelniania trusted-proxy sprawdź:- Proxy jest jedyną ścieżką: port Gateway jest odgrodzony firewallem od wszystkiego poza Twoim proxy
- trustedProxies jest minimalne: tylko rzeczywiste adresy IP Twojego proxy, nie całe podsieci
- Brak źródła proxy loopback: uwierzytelnianie trusted-proxy kończy się w trybie zamkniętym dla żądań ze źródła loopback
- Proxy usuwa nagłówki: Twoje proxy nadpisuje (a nie dopisuje) nagłówki
x-forwarded-*od klientów - Terminacja TLS: Twoje proxy obsługuje TLS; użytkownicy łączą się przez HTTPS
- allowedOrigins jest jawne: Control UI spoza loopback używa jawnego
gateway.controlUi.allowedOrigins - allowUsers jest ustawione (zalecane): ogranicz do znanych użytkowników zamiast dopuszczać każdego uwierzytelnionego
- Brak mieszanej konfiguracji tokenów: nie ustawiaj jednocześnie
gateway.auth.tokenigateway.auth.mode: "trusted-proxy"
Audyt bezpieczeństwa
openclaw security audit oznaczy uwierzytelnianie trusted-proxy jako wykrycie o krytycznym poziomie ważności. Jest to celowe — ma przypominać, że delegujesz bezpieczeństwo do konfiguracji swojego proxy.
Audyt sprawdza:
- Bazowe ostrzeżenie/przypomnienie krytyczne
gateway.trusted_proxy_auth - Brak konfiguracji
trustedProxies - Brak konfiguracji
userHeader - Puste
allowUsers(zezwala każdemu uwierzytelnionemu użytkownikowi) - Politykę pochodzenia przeglądarki z wildcardem lub brakującą na wystawionych powierzchniach Control UI
Rozwiązywanie problemów
trusted_proxy_untrusted_source
Żądanie nie przyszło z adresu IP znajdującego się w gateway.trustedProxies. Sprawdź:
- Czy adres IP proxy jest poprawny? (adresy IP kontenerów Docker mogą się zmieniać)
- Czy przed Twoim proxy znajduje się load balancer?
- Użyj
docker inspectlubkubectl get pods -o wide, aby znaleźć rzeczywiste adresy IP
trusted_proxy_loopback_source
OpenClaw odrzucił żądanie trusted-proxy ze źródła loopback.
Sprawdź:
- Czy proxy łączy się z
127.0.0.1/::1? - Czy próbujesz używać uwierzytelniania trusted-proxy z reverse proxy loopback na tym samym hoście?
- Użyj uwierzytelniania tokenem/hasłem dla konfiguracji proxy loopback na tym samym hoście, albo
- Kieruj ruch przez zaufany adres proxy spoza loopback i utrzymuj ten adres IP w
gateway.trustedProxies.
trusted_proxy_user_missing
Nagłówek użytkownika był pusty lub go brakowało. Sprawdź:
- Czy Twoje proxy jest skonfigurowane do przekazywania nagłówków tożsamości?
- Czy nazwa nagłówka jest poprawna? (wielkość liter nie ma znaczenia, ale pisownia tak)
- Czy użytkownik jest faktycznie uwierzytelniony w proxy?
trusted*proxy_missing_header*\*
Wymagany nagłówek nie był obecny. Sprawdź:
- Konfigurację Twojego proxy dla tych konkretnych nagłówków
- Czy nagłówki nie są gdzieś po drodze usuwane
trusted_proxy_user_not_allowed
Użytkownik jest uwierzytelniony, ale nie znajduje się w allowUsers. Dodaj go albo usuń allowlistę.
trusted_proxy_origin_not_allowed
Uwierzytelnianie trusted-proxy powiodło się, ale nagłówek przeglądarki Origin nie przeszedł kontroli pochodzenia Control UI.
Sprawdź:
- Czy
gateway.controlUi.allowedOriginszawiera dokładne pochodzenie przeglądarki - Czy nie polegasz na wildcard origins, chyba że celowo chcesz zachowanie allow-all
- Jeśli celowo używasz trybu fallbacku nagłówka Host, czy
gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=truezostało ustawione świadomie
WebSocket nadal nie działa
Upewnij się, że Twoje proxy:- Obsługuje podniesienia WebSocket (
Upgrade: websocket,Connection: upgrade) - Przekazuje nagłówki tożsamości przy żądaniach podniesienia WebSocket (nie tylko dla HTTP)
- Nie ma osobnej ścieżki uwierzytelniania dla połączeń WebSocket
Migracja z uwierzytelniania tokenem
Jeśli przechodzisz z uwierzytelniania tokenem na trusted-proxy:- Skonfiguruj proxy, aby uwierzytelniało użytkowników i przekazywało nagłówki
- Przetestuj konfigurację proxy niezależnie (curl z nagłówkami)
- Zaktualizuj konfigurację OpenClaw o uwierzytelnianie trusted-proxy
- Zrestartuj Gateway
- Przetestuj połączenia WebSocket z Control UI
- Uruchom
openclaw security auditi przejrzyj wykrycia
Powiązane
- Security — pełny przewodnik po bezpieczeństwie
- Configuration — dokumentacja konfiguracji
- Remote Access — inne wzorce zdalnego dostępu
- Tailscale — prostsza alternatywa dla dostępu tylko przez tailnet