Коли використовувати
- Ви запускаєте OpenClaw за проксі з підтримкою ідентифікації (Pomerium, Caddy + OAuth, nginx + oauth2-proxy, Traefik + forward auth).
- Ваш проксі виконує всю автентифікацію та передає ідентичність користувача через заголовки.
- Ви працюєте в середовищі Kubernetes або контейнерів, де проксі є єдиним шляхом до Gateway.
- Ви стикаєтеся з помилками WebSocket
1008 unauthorized, оскільки браузери не можуть передавати токени в корисному навантаженні WS.
Коли НЕ використовувати
- Ваш проксі не автентифікує користувачів, а лише завершує TLS або балансує навантаження.
- Існує будь-який шлях до Gateway в обхід проксі (прогалини в міжмережевому екрані, доступ із внутрішньої мережі).
- Ви не впевнені, що проксі правильно видаляє або перезаписує переспрямовані заголовки.
- Вам потрібен лише особистий однокористувацький доступ (натомість розгляньте Tailscale Serve + local loopback).
Як це працює
Проксі автентифікує користувача
Проксі додає заголовок ідентичності
x-forwarded-user: nick@example.com).Gateway перевіряє довірене джерело
gateway.trustedProxies), а не з власної адреси local loopback або локального інтерфейсу Gateway.Gateway отримує ідентичність
Авторизація
allowUsers (якщо її налаштовано), запит авторизується.Конфігурація
Довідник із конфігурації
"trusted-proxy".Поведінка сполучення Control UI
Коли режимgateway.auth.mode = "trusted-proxy" активний і запит проходить перевірки довіреного проксі, сеанси WebSocket Control UI можуть підключатися без ідентичності сполученого пристрою.
Наслідки для областей доступу:
- Сеанси WebSocket Control UI без пристрою підключаються, але за замовчуванням не отримують жодних операторських областей доступу. OpenClaw очищає список запитаних областей доступу до
[], щоб сеанс, не прив’язаний до схваленого сполученого пристрою або токена, не міг самостійно оголошувати дозволи. - Якщо після успішного підключення WebSocket методи завершуються помилкою
missing scope, використовуйте HTTPS, щоб браузер міг створити ідентичність пристрою та завершити сполучення. Див. Незахищений HTTP у Control UI. - Лише для аварійного доступу:
gateway.controlUi.dangerouslyDisableDeviceAuth=trueзберігає запитані області доступу навіть без ідентичності пристрою. Це суттєве послаблення безпеки; якнайшвидше скасуйте його. Див. Незахищений HTTP у Control UI.
x-openclaw-scopes у запиті на оновлення з’єднання WebSocket Control UI, OpenClaw обмежує області доступу сеансу перетином запитаних і оголошених областей. Цей заголовок не надає областей доступу, а лише звужує їх набір для сеансу.
Наслідки:
- У цьому режимі сполучення більше не є основним бар’єром доступу до Control UI.
- Політика автентифікації зворотного проксі та
allowUsersстають фактичними засобами контролю доступу. - Дозволяйте вхідний трафік Gateway лише з довірених IP-адрес проксі (
gateway.trustedProxies+ міжмережевий екран).
gateway.controlUi.dangerouslyDisableDeviceAuth не надає областей доступу довільним клієнтам із client.mode: "backend" або клієнтам у формі CLI. Власна автоматизація має використовувати ідентичність пристрою та сполучення, зарезервований прямий локальний допоміжний шлях серверної частини client.id: "gateway-client" або Plugin адміністрування HTTP RPC, якщо інтерфейс запитів і відповідей HTTP краще відповідає потребам.
Заголовок операторських областей доступу
Автентифікація через довірений проксі — це режим HTTP, що містить ідентичність, тому виклики можуть за бажанням оголошувати операторські області доступу за допомогоюx-openclaw-scopes у запитах HTTP API.
Примітка: області доступу WebSocket визначаються рукостисканням протоколу Gateway і прив’язкою ідентичності пристрою. У запитах на оновлення з’єднання WebSocket Control UI x-openclaw-scopes лише обмежує узгоджені області доступу сеансу, а не надає їх. Див. Поведінка сполучення Control UI.
Приклади:
x-openclaw-scopes: operator.readx-openclaw-scopes: operator.read,operator.writex-openclaw-scopes: operator.admin,operator.write
- Якщо заголовок наявний, OpenClaw враховує оголошений набір областей доступу.
- Якщо заголовок наявний, але порожній, запит не оголошує жодних операторських областей доступу.
- Якщо заголовок відсутній, звичайні HTTP API, що містять ідентичність, використовують стандартний набір операторських областей доступу за замовчуванням (
operator.admin,operator.read,operator.write,operator.approvals,operator.pairing,operator.talk.secrets). - Маршрути HTTP Plugin, що використовують автентифікацію Gateway, за замовчуванням мають вужчі права: якщо
x-openclaw-scopesвідсутній, їхня область доступу середовища виконання обмежується лишеoperator.write. - HTTP-запити з браузерного джерела мають пройти перевірку
gateway.controlUi.allowedOriginsабо навмисно налаштованого резервного режиму на основі заголовка Host навіть після успішної автентифікації через довірений проксі.
x-openclaw-scopes, коли потрібно звузити права запиту через довірений проксі порівняно зі стандартними або коли маршруту Plugin з автентифікацією Gateway потрібні ширші права, ніж область запису.
Завершення TLS та HSTS
Використовуйте одну точку завершення TLS і застосовуйте HSTS у ній.- Завершення TLS на проксі (рекомендовано)
- Завершення TLS на Gateway
https://control.example.com, установіть Strict-Transport-Security на проксі для цього домену.- Добре підходить для розгортань із доступом з інтернету.
- Зберігає політику сертифікатів і посилення безпеки HTTP в одному місці.
- OpenClaw може продовжувати працювати через HTTP на local loopback за проксі.
Рекомендації щодо розгортання
- Спочатку встановіть короткий максимальний термін, наприклад
max-age=300, на час перевірки трафіку. - Збільшуйте його до тривалих значень, наприклад
max-age=31536000, лише після досягнення високої впевненості. - Додавайте
includeSubDomains, лише якщо кожен піддомен готовий до HTTPS. - Використовуйте попереднє завантаження, лише якщо свідомо виконуєте його вимоги для повного набору доменів.
- Локальна розробка лише через local loopback не отримує переваг від HSTS.
Приклади налаштування проксі
Pomerium
Pomerium
x-pomerium-claim-email або інших заголовках тверджень, а JWT — у x-pomerium-jwt-assertion.Caddy з OAuth
Caddy з OAuth
caddy-security може автентифікувати користувачів і передавати заголовки ідентичності.nginx + oauth2-proxy
nginx + oauth2-proxy
x-auth-request-email.Traefik with forward auth
Traefik with forward auth
Змішана конфігурація токенів
Gateway відхиляє запуск автентифікації через довірений проксі, якщо також налаштовано спільний токен (gateway.auth.token або OPENCLAW_GATEWAY_TOKEN). Ці два способи взаємовиключні, оскільки спільний токен дозволив би викликам із того самого хоста автентифікуватися цілком іншим шляхом, ніж перевірені проксі ідентифікаційні дані, які має забезпечувати цей режим.
Якщо запуск завершується помилкою на кшталт gateway auth mode is trusted-proxy, but a shared token is also configured:
- Видаліть спільний токен під час використання режиму довіреного проксі або
- Змініть
gateway.auth.modeна"token", якщо ви плануєте автентифікацію на основі токена.
gateway.auth.password / OPENCLAW_GATEWAY_PASSWORD. Резервна автентифікація за токеном навмисно не підтримується в режимі довіреного проксі.
Контрольний список безпеки
Перш ніж увімкнути автентифікацію через довірений проксі, перевірте:- Проксі — єдиний шлях: порт Gateway захищено брандмауером від усіх підключень, крім вашого проксі.
- Мінімальний список trustedProxies: лише фактичні IP-адреси ваших проксі, а не цілі підмережі.
- Джерело проксі через local loopback вибрано свідомо: автентифікація через довірений проксі працює за принципом безпечної відмови для запитів із джерелом local loopback, якщо
gateway.auth.trustedProxy.allowLoopbackявно не ввімкнено для проксі на тому самому хості. - Проксі видаляє заголовки: ваш проксі перезаписує (а не доповнює) отримані від клієнтів заголовки
x-forwarded-*. - Завершення TLS: ваш проксі обробляє TLS; користувачі підключаються через HTTPS.
- allowedOrigins задано явно: Control UI поза local loopback використовує явно заданий
gateway.controlUi.allowedOrigins. - allowUsers налаштовано (рекомендовано): обмежте доступ відомими користувачами замість дозволу всім автентифікованим користувачам.
- Немає змішаної конфігурації токенів: не задавайте одночасно
gateway.auth.tokenіgateway.auth.mode: "trusted-proxy". - Локальний резервний пароль є приватним: якщо ви налаштували
gateway.auth.passwordдля внутрішніх прямих клієнтів, захистіть порт Gateway брандмауером, щоб віддалені клієнти поза проксі не могли підключитися до нього безпосередньо.
Аудит безпеки
openclaw security audit позначає автентифікацію через довірений проксі результатом із критичним рівнем серйозності. Це навмисно: таке попередження нагадує, що ви делегуєте безпеку конфігурації проксі.
Аудит перевіряє:
- Базове попередження або критичне нагадування
gateway.trusted_proxy_auth. - Відсутню конфігурацію
trustedProxies. - Відсутню конфігурацію
userHeader. - Порожній список
allowUsers(дозволяє доступ будь-якому автентифікованому користувачу). - Увімкнений
allowLoopbackдля джерел проксі на тому самому хості.
* або відсутній gateway.controlUi.allowedOrigins, а також резервне визначення джерела за заголовком Host.
Усунення несправностей
trusted_proxy_untrusted_source
trusted_proxy_untrusted_source
gateway.trustedProxies. Перевірте:- Чи правильна IP-адреса проксі? (IP-адреси контейнерів Docker можуть змінюватися.)
- Чи є перед вашим проксі балансувальник навантаження?
- Скористайтеся
docker inspectабоkubectl get pods -o wide, щоб знайти фактичні IP-адреси.
trusted_proxy_loopback_source
trusted_proxy_loopback_source
- Чи підключається проксі з
127.0.0.1/::1? - Чи намагаєтеся ви використовувати автентифікацію через довірений проксі зі зворотним проксі local loopback на тому самому хості?
- Надавайте перевагу автентифікації за токеном або паролем для внутрішніх клієнтів на тому самому хості, які не проходять через проксі, або
- Спрямовуйте трафік через адресу довіреного проксі, яка не належить до local loopback, і залиште цю IP-адресу в
gateway.trustedProxies, або - Для навмисно налаштованого зворотного проксі на тому самому хості задайте
gateway.auth.trustedProxy.allowLoopback = true, залиште адресу local loopback уgateway.trustedProxiesі переконайтеся, що проксі видаляє або перезаписує заголовки ідентифікаційних даних.
trusted_proxy_local_interface_source / trusted_proxy_local_interface_check_failed
trusted_proxy_local_interface_source / trusted_proxy_local_interface_check_failed
..._check_failed означає, що під час виявлення інтерфейсів сталася помилка, тому OpenClaw працює за принципом безпечної відмови.Перевірте:- Чи надсилає процес безпосередньо на хості Gateway заголовки ідентифікаційних даних в обхід проксі?
- Чи працює проксі в тому самому просторі мережевих імен, що й Gateway, з IP-адресою, яка також відображається як локальний інтерфейс?
allowLoopback лише для справжньої конфігурації проксі на тому самому хості.trusted_proxy_user_missing
trusted_proxy_user_missing
- Чи налаштовано проксі для передавання заголовків ідентифікаційних даних?
- Чи правильна назва заголовка? (Регістр не враховується, але написання має значення.)
- Чи справді користувач автентифікований на проксі?
trusted_proxy_missing_header_*
trusted_proxy_missing_header_*
- Конфігурацію проксі для відповідних заголовків.
- Чи не видаляються заголовки на якомусь етапі ланцюжка.
trusted_proxy_user_not_allowed
trusted_proxy_user_not_allowed
allowUsers. Додайте його або видаліть список дозволених користувачів.trusted_proxy_no_proxies_configured / trusted_proxy_config_missing
trusted_proxy_no_proxies_configured / trusted_proxy_config_missing
gateway.auth.mode має значення "trusted-proxy", але gateway.trustedProxies порожній або відсутній сам gateway.auth.trustedProxy. Усі запити відхиляються, доки не буде налаштовано обидва параметри.trusted_proxy_origin_not_allowed
trusted_proxy_origin_not_allowed
Origin не пройшов перевірки джерела Control UI.Перевірте:gateway.controlUi.allowedOriginsмістить точне джерело браузера.- Ви не покладаєтеся на джерела з шаблоном
*, якщо лише навмисно не бажаєте дозволити всі джерела. - Якщо ви навмисно використовуєте режим резервного визначення за заголовком Host, параметр
gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=trueзадано свідомо.
Connection succeeds but methods report missing scope
Connection succeeds but methods report missing scope
chat.history, sessions.list або
models.list завершується помилкою missing scope: operator.read.Поширені причини:- Сеанс Control UI без пристрою: автентифікація через довірений проксі може дозволити з’єднання WebSocket без ідентифікаційних даних пристрою, але OpenClaw навмисно очищає області доступу в сеансах без пристрою.
- Власний клієнт серверної частини:
gateway.controlUi.dangerouslyDisableDeviceAuthдіє лише в межах Control UI і не надає областей доступу довільним клієнтам WebSocket серверної частини або клієнтам у формі CLI. - Надто вузький
x-openclaw-scopes: якщо ваш проксі додає цей заголовок до запиту оновлення WebSocket Control UI, області доступу сеансу обмежуються цим набором. Порожнє значення заголовка не надає жодних областей доступу.
- Для Control UI використовуйте HTTPS, щоб браузер міг створити ідентифікаційні дані пристрою та завершити сполучення.
- Для власної автоматизації використовуйте ідентифікаційні дані пристрою та сполучення, зарезервований допоміжний шлях серверної частини
gateway-clientдля прямих локальних підключень або адміністративний HTTP RPC. - Використовуйте
gateway.controlUi.dangerouslyDisableDeviceAuth: trueлише як тимчасовий аварійний спосіб доступу до Control UI.
WebSocket still failing
WebSocket still failing
- Підтримує оновлення WebSocket (
Upgrade: websocket,Connection: upgrade). - Передає заголовки ідентифікаційних даних у запитах оновлення WebSocket (а не лише HTTP).
- Не має окремого шляху автентифікації для з’єднань WebSocket.
Перехід з автентифікації за токеном
Configure the proxy
Test the proxy independently
curl із заголовками).Update OpenClaw config
Restart the Gateway
Test WebSocket
Audit
openclaw security audit і перегляньте результати.Пов’язані матеріали
- Конфігурація — довідник із конфігурації
- Області доступу оператора — ролі, області доступу та перевірки схвалення
- Віддалений доступ — інші схеми віддаленого доступу
- Безпека — повний посібник із безпеки
- Tailscale — простіша альтернатива для доступу лише з мережі Tailscale