Консультация Oblako.kz

Безопасный публичный доступ к OpenClaw через Google OAuth и Caddy

Обычная инсталляция OpenClaw на VPS подразумевает доступ к панели управления ботом и чату по SSH, а основное общение с ботом происходит через мессенджеры. Однако часто бывает нужно дать доступ доверенному кругу лиц для управления ботом или использования встроенного чата.

В этой подробной инструкции мы детально описали процесс предоставления публичного защищенного доступа к OpenClaw через Google OAuth и Caddy по доверенному списку почтовых адресов.

Помимо уже установленного и предварительно настроенного OpenClaw на VPS понадобится:

  • Домен с A-записью на сервер, например openclaw.example.com
  • Аккаунт Google Cloud (для OAuth-клиента)
  • Caddy с модулем caddy-security

Начнем со сборки Caddy с модулем caddy-security через xcaddy.

Установка Caddy с модулем caddy-security (через xcaddy)

1. Установим нужные зависимости для сборки Caddy.

sudo apt update
sudo apt install -y debian-keyring debian-archive-keyring
apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' |
sudo gpg -- dearmor -o
/usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf
'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo
tee /etc/apt/sources.list.d/caddy-stable.list >/dev/null
sudo apt update
sudo apt install -y caddy golang-go

2. Установим xcaddy.

go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
echo 'export PATH="$PATH:$HOME/go/bin"' >> ~/.bashrc
source ~/.bashrc

3. Соберем Caddy с модулем caddy-security.

xcaddy build \
  --with github.com/greenpau/caddy-security

4. Заменим системный бинарник, если до этого был установлен чистый Caddy.

sudo systemctl stop caddy
sudo install -m 755 ./caddy /usr/bin/caddy
sudo setcap cap_net_bind_service=+ep /usr/bin/caddy
sudo systemctl start caddy

5. Проверим, что модули подключены.

caddy list-modules | grep -E 'security|authn|authz|oauth'

Настройка Google OAuth в Google Cloud

1. Откройте Google Cloud Console.

2. Перейдите в раздел APIs & Services.

3. Далее перейдите во вкладку OAuth Overview:.

4. Перейдите во вкладку Clients и кликните по кнопке + Create client.

5. Заполните следующие поля создания OAuth-клиента Google:

  • Application type — выберите из списка Web application;
  • Name — укажите имя клиента, например, OpenClawOAuth;
  • Authorized JavaScript origins — укажите: https://openclaw.example.com
  • Authorized redirect URIs — укажите: https://openclaw.example.com/auth/oauth2/google

6. Нажмите кнопку Create.

После сохранения клиента появится модальное окно OAuth client created. Его можно закрыть. В разделе Clients появится новая запись, которая будет содержать Client ID и Client secret, нужные для Caddy:

Добавление переменных окружения Caddy с секретами Google OAuth

1. Создайте файл /etc/default/caddy.

sudo tee /etc/default/caddy >/dev/null <<'EOF'
OIDC_CLIENT_ID="ваш-client-id.apps.googleusercontent.com"
OIDC_CLIENT_SECRET="ваш-client-secret"
OIDC_METADATA_URL="https://accounts.google.com/.well-known/openid-configuration"
OIDC_BASE_AUTH_URL="https://openclaw.example.com"
EOF

2. Добавьте systemd drop-in, чтобы сервис читал этот файл.

sudo mkdir -p /etc/systemd/system/caddy.service.d
sudo tee /etc/systemd/system/caddy.service.d/openclaw-oauth.conf >/dev/null <<'EOF'
[Service]
EnvironmentFile=-/etc/default/caddy
EOF
sudo systemctl daemon-reload

Конфигурация Caddy

1. Создайте файл /etc/caddy/Caddyfile со следующим содержимым.

{
  order authenticate before respond
  order authorize before basicauth
}

(openclaw_security) {
  security {
    oauth identity provider google {
      realm google
      driver oidc
      client_id {$OIDC_CLIENT_ID}
      client_secret {$OIDC_CLIENT_SECRET}
      scopes openid email profile
      metadata_url {$OIDC_METADATA_URL}
    }

    authentication portal openclaw_portal {
      crypto default token lifetime 3600
      cookie domain openclaw.example.com
      enable identity provider google
      transform user {
        match realm google
        action add role authp/user
      }
      ui {
        links {
          "OpenClaw" /portal
        }
      }
    }

    authorization policy openclaw_policy {
      set auth url /auth
      allow roles authp/user
      crypto key verify "insecure-please-change"
    }
  }
}

openclaw.example.com { # Замените на свой домен
  import openclaw_security

  header {
    Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
  }

  route /auth* {
    authenticate with openclaw_portal   }
  route /* {
    authorize with openclaw_policy
    reverse_proxy 127.0.0.1:18789 { # Замените на свой URL
      header_up X-Forwarded-User {http.auth.user.email}
      header_up X-Forwarded-Proto {scheme}
      header_up X-Forwarded-Host {host}
      header_up X-Forwarded-For {remote_host}
    }
  }
}

2. Сохраните файл и выполните следующую последовательность команд.

sudo caddy fmt --overwrite /etc/caddy/Caddyfile
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl restart caddy
sudo systemctl status caddy --no-pager

Конфигурация OpenClaw в режиме trusted-proxy

1. Откройте ~/.openclaw/openclaw.json и настройте gateway.

{
  "gateway": {
    "bind": "127.0.0.1",
    "port": 18789,
    "trustedProxies": [
      "127.0.0.1",
      "::1"
    ],
    auth": {
      "mode": "trusted-proxy",
      "trustedProxy": {
        "userHeader": "x-forwarded-user",
        "requiredHeaders": [
          "x-forwarded-proto",
          "x-forwarded-host"
        ],
        "allowUsers": [
          "you@gmail.com",
          "teammate@gmail.com"
        ]
      }
    },
    "controlUi": {
      "allowedOrigins": [
        "https://openclaw.example.com"
      ]
    }
  }
}

После изменения перезапустите OpenClaw (команда зависит от вашего способа запуска).

Проверка после настройки

1. Откройте https://openclaw.example.com — появится приветственная страница модуля Caddy caddy-security.

2. Кликните по полю OIDC — откроется стандартная форма входа через Google. Доступ к OpenClaw будет только у пользователей, чьи почтовые адреса перечислены в списке gateway.auth.trustedProxy.allowUsers конфигурации ~/.openclaw/openclaw.json.

3. После успешного входа произойдет редирект в раздел сессий OpenClaw:

Выход из аккаунта — logout

Для выхода из аккаунта используйте endpoint: https://openclaw.example.com/auth/logout. Если браузер сразу выполняет повторный вход, выйдите также из Google-аккаунта или откройте приватное окно.

Частые проблемы и решения

  1. invalid_client
    • Неправильный OIDC_CLIENT_ID или OIDC_CLIENT_SECRET
    • Проверьте /etc/default/caddy и перезапустите Caddy
  2. redirect_uri_mismatch
    • URI в Google Cloud не совпадает с реальным callback от Caddy
    • Должно быть ровно https://openclaw.example.com/auth/oauth2/google
  3.  
  4. Не выдан сертификат Let’s Encrypt
    • Проверьте DNS A-запись и открытые порты 80/443
    • Проверьте, что домен указывает на ваш сервер
  5. OpenClaw недоступен после логина
    • Убедитесь, что OpenClaw реально слушает 127.0.0.1:18789
    • Проверьте, что Caddy проксирует на правильный адрес
    • Проверьте allowUsers в OpenClaw
Последнее обновление: 15.04.2026