Ne zaman kullanılmalı
trusted-proxy kimlik doğrulama modunu şu durumlarda kullanın:
- OpenClaw’ı bir kimlik farkındalıklı proxy arkasında çalıştırıyorsanız (Pomerium, Caddy + OAuth, nginx + oauth2-proxy, Traefik + forward auth).
- Proxy’niz tüm kimlik doğrulamayı yönetiyor ve kullanıcı kimliğini başlıklar aracılığıyla iletiyorsa.
- Proxy’nin Gateway’e giden tek yol olduğu bir Kubernetes veya konteyner ortamındaysanız.
- Tarayıcılar WS yüklerinde token iletemediği için WebSocket
1008 unauthorizedhataları alıyorsanız.
Ne zaman kullanılmamalı
- Proxy’niz kullanıcıların kimliğini doğrulamıyorsa (yalnızca TLS sonlandırıcı veya yük dengeleyiciyse).
- Gateway’e proxy’yi atlayan herhangi bir yol varsa (güvenlik duvarı açıkları, dahili ağ erişimi).
- Proxy’nizin iletilen başlıkları doğru şekilde kaldırıp kaldırmadığından/üzerine yazıp yazmadığından emin değilseniz.
- Yalnızca kişisel tek kullanıcılı erişime ihtiyacınız varsa (daha basit kurulum için Tailscale Serve + loopback’i değerlendirin).
Nasıl çalışır
Proxy kullanıcının kimliğini doğrular
Ters proxy’niz kullanıcıların kimliğini doğrular (OAuth, OIDC, SAML vb.).
Proxy bir kimlik başlığı ekler
Proxy, kimliği doğrulanmış kullanıcı kimliğini içeren bir başlık ekler (örn.
x-forwarded-user: nick@example.com).Gateway güvenilir kaynağı doğrular
OpenClaw, isteğin bir güvenilir proxy IP’sinden geldiğini denetler (
gateway.trustedProxies içinde yapılandırılır).Control UI eşleştirme davranışı
gateway.auth.mode = "trusted-proxy" etkin olduğunda ve istek trusted-proxy denetimlerinden geçtiğinde, Control UI WebSocket oturumları cihaz eşleştirme kimliği olmadan bağlanabilir.
Kapsam etkileri:
- Cihazsız Control UI WebSocket oturumları bağlanır ancak varsayılan olarak operatör kapsamı almaz. OpenClaw istenen kapsam listesini
[]olarak temizler; böylece onaylanmış eşleştirilmiş bir cihaza/token’a bağlı olmayan bir oturum izinleri kendi kendine beyan edemez. - Başarılı bir WebSocket bağlantısından sonra yöntemler
missing scopeile başarısız olursa, tarayıcının cihaz kimliği oluşturabilmesi ve eşleştirmeyi tamamlayabilmesi için HTTPS kullanın. Bkz. Control UI güvenli olmayan HTTP. - Yalnızca acil durum için:
gateway.controlUi.dangerouslyDisableDeviceAuth=true, cihaz kimliği olmasa bile istenen kapsamları korur. Bu ciddi bir güvenlik düşürmesidir; hızla geri alın. Bkz. Control UI güvenli olmayan HTTP.
- Proxy’niz Control UI WebSocket yükseltme isteğinde
x-openclaw-scopesgönderirse, OpenClaw oturum kapsamlarını istenen kapsamlar ile beyan edilen kapsamların kesişimiyle sınırlar. Bu başlık kapsam vermez; yalnızca oturumun sahip olabileceklerini daraltır.
- Bu modda eşleştirme artık Control UI erişimi için birincil kapı değildir.
- Ters proxy kimlik doğrulama ilkeniz ve
allowUsersetkin erişim denetimi haline gelir. - Gateway girişini yalnızca güvenilir proxy IP’leriyle kilitli tutun (
gateway.trustedProxies+ güvenlik duvarı).
gateway.controlUi.dangerouslyDisableDeviceAuth, rastgele client.mode: "backend" veya CLI biçimli istemcilere kapsam vermez. Özel otomasyon, cihaz kimliği/eşleştirme, ayrılmış doğrudan-yerel client.id: "gateway-client" backend yardımcı yolu veya HTTP istek/yanıt yüzeyi daha uygunsa admin HTTP RPC plugin kullanmalıdır.
Yapılandırma
Yapılandırma referansı
Güvenilecek proxy IP adresleri dizisi. Diğer IP’lerden gelen istekler reddedilir.
"trusted-proxy" olmalıdır.Kimliği doğrulanmış kullanıcı kimliğini içeren başlık adı.
İsteğin güvenilir sayılması için bulunması gereken ek başlıklar.
Kullanıcı kimlikleri izin listesi. Boş olması tüm kimliği doğrulanmış kullanıcılara izin verileceği anlamına gelir.
Aynı ana makinedeki loopback ters proxy’ler için açıkça etkinleştirilen destek. Varsayılan değer
false.TLS sonlandırma ve HSTS
Tek bir TLS sonlandırma noktası kullanın ve HSTS’yi orada uygulayın.- Proxy TLS sonlandırması (önerilir)
- Gateway TLS sonlandırması
Ters proxy’niz
https://control.example.com için HTTPS’yi yönetiyorsa, bu etki alanı için Strict-Transport-Security değerini proxy’de ayarlayın.- İnternete açık dağıtımlar için uygundur.
- Sertifika + HTTP sertleştirme ilkesini tek yerde tutar.
- OpenClaw proxy arkasında loopback HTTP üzerinde kalabilir.
Dağıtım rehberi
- Trafiği doğrularken önce kısa bir maksimum yaşla başlayın (örneğin
max-age=300). - Uzun ömürlü değerlere (örneğin
max-age=31536000) yalnızca güven yüksek olduktan sonra yükseltin. includeSubDomainsdeğerini yalnızca her alt etki alanı HTTPS’ye hazırsa ekleyin.- Preload’ı yalnızca tüm etki alanı kümeniz için preload gereksinimlerini bilinçli olarak karşılıyorsanız kullanın.
- Yalnızca loopback yerel geliştirme HSTS’den yararlanmaz.
Proxy kurulum örnekleri
Pomerium
Pomerium
Pomerium kimliği Pomerium yapılandırma parçacığı:
x-pomerium-claim-email içinde (veya diğer claim başlıklarında) ve JWT’yi x-pomerium-jwt-assertion içinde iletir.OAuth ile Caddy
OAuth ile Caddy
caddy-security plugin’ine sahip Caddy, kullanıcıların kimliğini doğrulayabilir ve kimlik başlıklarını iletebilir.nginx + oauth2-proxy
nginx + oauth2-proxy
oauth2-proxy kullanıcıların kimliğini doğrular ve kimliği nginx yapılandırma parçacığı:
x-auth-request-email içinde iletir.forward auth ile Traefik
forward auth ile Traefik
Karma token yapılandırması
OpenClaw, hemgateway.auth.token (veya OPENCLAW_GATEWAY_TOKEN) hem de trusted-proxy modunun aynı anda etkin olduğu belirsiz yapılandırmaları reddeder. Karma token yapılandırmaları, loopback isteklerinin sessizce yanlış kimlik doğrulama yolunda doğrulanmasına neden olabilir.
Başlangıçta mixed_trusted_proxy_token hatası görürseniz:
- trusted-proxy modunu kullanırken paylaşılan token’ı kaldırın veya
- Token tabanlı kimlik doğrulama amaçlıyorsanız
gateway.auth.modedeğerini"token"olarak değiştirin.
gateway.auth.password / OPENCLAW_GATEWAY_PASSWORD ile kimlik doğrulayabilir. Belirteç yedeği trusted-proxy modunda kasıtlı olarak desteklenmemeye devam eder.
Operatör kapsamları üstbilgisi
Trusted-proxy kimlik doğrulaması kimlik taşıyan bir HTTP modudur, bu yüzden çağıranlar HTTP API isteklerinde isteğe bağlı olarakx-openclaw-scopes ile operatör kapsamları bildirebilir.
Not: WebSocket kapsamları Gateway protokol el sıkışması ve cihaz kimliği bağlaması tarafından belirlenir. Control UI WebSocket yükseltme isteklerinde x-openclaw-scopes yalnızca görüşülen oturum kapsamları için bir üst sınırdır, bir yetki vermez. trusted-proxy ile WebSocket kapsam davranışı için bkz. Control UI eşleştirme davranışı.
Örnekler:
x-openclaw-scopes: operator.readx-openclaw-scopes: operator.read,operator.writex-openclaw-scopes: operator.admin,operator.write
- Üstbilgi mevcut olduğunda, OpenClaw bildirilen kapsam kümesini uygular.
- Üstbilgi mevcut ama boş olduğunda, istek hiçbir operatör kapsamı bildirmez.
- Üstbilgi yoksa, normal kimlik taşıyan HTTP API’leri standart varsayılan operatör kapsam kümesine geri döner.
- Gateway kimlik doğrulamalı plugin HTTP rotaları varsayılan olarak daha dardır:
x-openclaw-scopesyoksa, çalışma zamanı kapsamlarıoperator.writekapsamına geri döner. - Tarayıcı kaynaklı HTTP istekleri, trusted-proxy kimlik doğrulaması başarılı olduktan sonra bile
gateway.controlUi.allowedOriginsdenetiminden (veya bilinçli Host üstbilgisi yedek modundan) geçmelidir. - Control UI WebSocket oturumlarında,
x-openclaw-scopesyükseltme isteğinde mevcut olduğunda bir kapsam üst sınırıdır. Boş değer kapsam vermez.
x-openclaw-scopes değerini açıkça gönderin.
Güvenlik kontrol listesi
trusted-proxy kimlik doğrulamasını etkinleştirmeden önce şunları doğrulayın:- Proxy tek yoldur: Gateway bağlantı noktası, proxy’niz dışında her şeye karşı güvenlik duvarıyla kapatılmıştır.
- trustedProxies asgaridir: Tüm alt ağlar değil, yalnızca gerçek proxy IP’leriniz.
- Loopback proxy kaynağı bilinçlidir:
gateway.auth.trustedProxy.allowLoopbackaynı ana makinedeki bir proxy için açıkça etkinleştirilmediği sürece loopback kaynaklı isteklerde trusted-proxy kimlik doğrulaması güvenli kapalı şekilde başarısız olur. - Proxy üstbilgileri temizler: Proxy’niz istemcilerden gelen
x-forwarded-*üstbilgilerinin üzerine yazar (ekleme yapmaz). - TLS sonlandırma: Proxy’niz TLS’yi yönetir; kullanıcılar HTTPS üzerinden bağlanır.
- allowedOrigins açıktır: Loopback dışı Control UI açık
gateway.controlUi.allowedOriginskullanır. - allowUsers ayarlanmıştır (önerilir): Kimliği doğrulanmış herkese izin vermek yerine bilinen kullanıcılarla sınırlandırın.
- Karışık belirteç yapılandırması yoktur: Hem
gateway.auth.tokenhem degateway.auth.mode: "trusted-proxy"ayarlamayın. - Yerel parola yedeği özeldir: Dahili doğrudan çağıranlar için
gateway.auth.passwordyapılandırırsanız, proxy dışı uzak istemcilerin doğrudan erişememesi için Gateway bağlantı noktasını güvenlik duvarıyla kapalı tutun.
Güvenlik denetimi
openclaw security audit, trusted-proxy kimlik doğrulamasını critical önem derecesinde bir bulgu olarak işaretler. Bu kasıtlıdır — güvenliği proxy kurulumunuza devrettiğinize dair bir hatırlatmadır.
Denetim şunları kontrol eder:
- Temel
gateway.trusted_proxy_authuyarısı/kritik hatırlatıcısı - Eksik
trustedProxiesyapılandırması - Eksik
userHeaderyapılandırması - Boş
allowUsers(kimliği doğrulanmış herhangi bir kullanıcıya izin verir) - Aynı ana makine proxy kaynakları için etkinleştirilmiş
allowLoopback - Açığa çıkarılmış Control UI yüzeylerinde joker karakterli veya eksik tarayıcı kaynak ilkesi
Sorun giderme
trusted_proxy_untrusted_source
trusted_proxy_untrusted_source
İstek
gateway.trustedProxies içindeki bir IP’den gelmedi. Şunları kontrol edin:- Proxy IP’si doğru mu? (Docker konteyner IP’leri değişebilir.)
- Proxy’nizin önünde bir yük dengeleyici var mı?
- Gerçek IP’leri bulmak için
docker inspectveyakubectl get pods -o widekullanın.
trusted_proxy_loopback_source
trusted_proxy_loopback_source
OpenClaw, loopback kaynaklı bir trusted-proxy isteğini reddetti.Kontrol edin:
- Proxy
127.0.0.1/::1üzerinden mi bağlanıyor? - Aynı ana makinede loopback ters proxy ile trusted-proxy kimlik doğrulaması kullanmaya mı çalışıyorsunuz?
- Proxy’den geçmeyen dahili aynı ana makine istemcileri için belirteç/parola kimlik doğrulamasını tercih edin veya
- Loopback olmayan güvenilir bir proxy adresi üzerinden yönlendirin ve bu IP’yi
gateway.trustedProxiesiçinde tutun veya - Bilinçli bir aynı ana makine ters proxy için
gateway.auth.trustedProxy.allowLoopback = trueayarlayın, loopback adresinigateway.trustedProxiesiçinde tutun ve proxy’nin kimlik üstbilgilerini temizlediğinden veya üzerine yazdığından emin olun.
trusted_proxy_user_missing
trusted_proxy_user_missing
Kullanıcı üstbilgisi boştu veya eksikti. Şunları kontrol edin:
- Proxy’niz kimlik üstbilgilerini geçirecek şekilde yapılandırılmış mı?
- Üstbilgi adı doğru mu? (büyük/küçük harfe duyarsızdır, ancak yazım önemlidir)
- Kullanıcının proxy’de kimliği gerçekten doğrulanmış mı?
trusted_proxy_missing_header_*
trusted_proxy_missing_header_*
Gerekli bir üstbilgi mevcut değildi. Şunları kontrol edin:
- Bu belirli üstbilgiler için proxy yapılandırmanız.
- Üstbilgilerin zincirin bir yerinde temizlenip temizlenmediği.
trusted_proxy_user_not_allowed
trusted_proxy_user_not_allowed
Kullanıcının kimliği doğrulanmış, ancak
allowUsers içinde değil. Ya kullanıcıyı ekleyin ya da izin listesini kaldırın.trusted_proxy_origin_not_allowed
trusted_proxy_origin_not_allowed
Trusted-proxy kimlik doğrulaması başarılı oldu, ancak tarayıcı
Origin üstbilgisi Control UI kaynak denetimlerinden geçmedi.Kontrol edin:gateway.controlUi.allowedOriginstam tarayıcı kaynağını içeriyor.- Bilinçli olarak herkese izin verme davranışı istemediğiniz sürece joker karakterli kaynaklara güvenmiyorsunuz.
- Host üstbilgisi yedek modunu bilinçli olarak kullanıyorsanız,
gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=truebilinçli şekilde ayarlanmış.
Connection succeeds but methods report missing scope
Connection succeeds but methods report missing scope
WebSocket bağlanır, ancak
chat.history, sessions.list veya
models.list, missing scope: operator.read hatasıyla başarısız olur.Yaygın nedenler:- Cihazsız Control UI oturumu: trusted-proxy kimlik doğrulaması WebSocket bağlantısını cihaz kimliği olmadan kabul edebilir, ancak OpenClaw tasarım gereği cihazsız oturumlarda kapsamları temizler.
- Özel arka uç istemcisi:
gateway.controlUi.dangerouslyDisableDeviceAuthControl UI kapsamındadır ve rastgele arka uç veya CLI biçimli WebSocket istemcilerine kapsam vermez. - Aşırı dar
x-openclaw-scopes: Proxy’niz bu üstbilgiyi Control UI WebSocket yükseltme isteğine ekliyorsa, oturum kapsamları bu kümeyle sınırlandırılır. Boş üstbilgi değeri kapsam vermez.
- Control UI için HTTPS kullanın, böylece tarayıcı cihaz kimliği oluşturabilir ve eşleştirmeyi tamamlayabilir.
- Özel otomasyon için cihaz kimliği/eşleştirme, ayrılmış doğrudan yerel
gateway-clientarka uç yardımcı yolu veya admin HTTP RPC kullanın. gateway.controlUi.dangerouslyDisableDeviceAuth: truedeğerini yalnızca geçici bir Control UI acil durum yolu olarak kullanın.
WebSocket still failing
WebSocket still failing
Proxy’nizin şunları yaptığından emin olun:
- WebSocket yükseltmelerini destekler (
Upgrade: websocket,Connection: upgrade). - Kimlik üstbilgilerini WebSocket yükseltme isteklerinde geçirir (yalnızca HTTP’de değil).
- WebSocket bağlantıları için ayrı bir kimlik doğrulama yolu yoktur.
Belirteç kimlik doğrulamasından geçiş
Belirteç kimlik doğrulamasından trusted-proxy’ye geçiyorsanız:Configure the proxy
Proxy’nizi kullanıcıların kimliğini doğrulayacak ve üstbilgileri geçirecek şekilde yapılandırın.
İlgili
- Yapılandırma — yapılandırma referansı
- Uzaktan erişim — diğer uzaktan erişim kalıpları
- Güvenlik — tam güvenlik kılavuzu
- Tailscale — yalnızca tailnet erişimi için daha basit alternatif