外部访问OpenClaw的Web UI触发网关多重安全防御机制故障问题排查

Zou, Ning 发布于 10 小时前 技术实践 1193 字 21 次阅读


相信使用小龙虾的人应该都遇到过origin not allowed (open the Control UI from the gateway host or allow it in gateway.controlUi.allowedOrigins)问题吧,这是个非常经典的 “跨域安全拦截”(CORS)问题。出现这个提示,说明你正在通过 公网 IP自定义域名​ 或者 局域网 IP​ 访问 OpenClaw 的网页控制台(Control UI),导致触发了OpenClaw的安全机制导致访问被拒绝。原因是:新版本的 OpenClaw 默认只允许通过本机回环地址(localhost127.0.0.1)打开控制台。一旦检测到是从外部网络进来的访问请求,就会无情拦截并报出这个“origin not allowed”的错误。解决这个问题的方法很简单,作者目前版本为:OpenClaw 2026.3.28 (f9b1079)

OpenClaw 2026.3.28 (f9b1079)

第一步:找到并修改配置文件

首先,你需要进入到部署 OpenClaw 的服务器终端(如果是 Docker 部署,请进入容器内部或直接映射修改)。找到 OpenClaw 的主配置文件,通常路径为:~/.openclaw/openclaw.json ,使用文本编辑器(如 vimnano)打开它:vim ~/.openclaw/openclaw.json

vim ~/.openclaw/openclaw.json

第二步:添加白名单地址 (allowedOrigins)

然后在配置文件中找到 gateway这一级,然后在里面添加或修改 controlUi.allowedOrigins字段。把你在浏览器里用来访问 Web UI 的地址(包括协议和端口)塞进去。

{
  "gateway": {
    "controlUi": {
      "allowedOrigins": [
        "http://localhost:18789", 
        "http://127.0.0.1:18789",          // 换成你的公网/局域网 IP
        "http://my-openclaw.com:18789"   // 换成你的域名
      ]
    }
  }
}
{
  "gateway": {
    "controlUi": {
      "allowedOrigins": [
        "http://localhost:18789", 
        "http://127.0.0.1:18789",          // 换成你的公网/局域网 IP
        "http://my-openclaw.com:18789"   // 换成你的域名
      ]
    }
  }
}

第三步:解决可能的“安全上下文”拦截

如果你添加完上面的白名单后,还是连不上,并且控制台报类似control ui requires device identity (use HTTPS or localhost secure context)。为了安全起见,OpenClaw 强制要求非本地访问必须使用 HTTPS。如果你只是临时在内网测试,不想折腾 SSL 证书,可以在刚才的 controlUi配置里再加一行,强行关闭这个限制:

"controlUi": {
  "allowedOrigins": ["http://你的IP:18789"],
  "allowInsecureAuth": true,          // 允许非HTTPS的鉴权
  "dangerouslyDisableDeviceAuth": true // 危险操作:在非安全上下文下禁用设备认证
}
"controlUi": {
  "allowedOrigins": ["http://你的IP:18789"],
  "allowInsecureAuth": true,          // 允许非HTTPS的鉴权
  "dangerouslyDisableDeviceAuth": true // 危险操作:在非安全上下文下禁用设备认证
}

第四步:重启服务使配置生效

改完配置后,一定要重启一下 OpenClaw 网关才能生效,常规 npm 安装环境:

openclaw gateway restart

Docker环境

docker restart openclaw
Image

第五步:设备配对安全机制触发

遇到 pairing required 提示,说明 OpenClaw 的设备配对安全机制被触发了。这是一件好事,意味着你的网关受到了保护,不允许未知设备随意连接。当你从一个新的浏览器、新的设备或者清除了缓存后访问 Web UI 时,Gateway 会拦截该连接并要求管理员(也就是你)进行授权。

解决这个问题有两种主要思路:“正规军路线”(安全推荐)​ 和 “懒人捷径”(适用于本地/内网测试)

方案一:“正规军路线”—— 手动批准设备(推荐)

这种方法最安全,授权后该浏览器/设备就会被永久信任(除非你清除浏览器缓存或更换设备)。你需要在部署 OpenClaw 的服务器或容器内执行以下命令,你会看到一个 Pending(待授权)列表,里面会有一台刚刚尝试连接你的设备记录:

openclaw devices list
openclaw devices list

从上一步的列表中,复制那个陌生的 Request ID,然后执行批准命令:

openclaw devices approve 

如果你确定只有一台设备在等待,可以直接用 --latest参数一键批准最新的请求:

openclaw devices approve --latest
openclaw devices approve --latest

方案二:“懒人捷径”—— 关闭配对检查(仅限内网/本机)

在新版本(特别是 2026.2.21 之后)中,它确实经常“失效”。打开你的 ~/.openclaw/openclaw.json配置文件(Docker 环境可能需要进入容器或映射路径)。

{
  "gateway": {
    "port": 18789,
    "auth": {
      "token": "你的网关令牌"
    },
    "controlUi": {
      "allowInsecureAuth": true  // 加上这一行
      "dangerouslyDisableDeviceAuth": true  // 加上这一行
    }
  }
}

保存文件后,重启你的 OpenClaw 服务(或 Docker 容器):

openclaw gateway restart

如果在操作过程中遇到以下特殊情况,可以参考解决:

  • Request ID 过期了:配对请求只有 5分钟​ 的寿命。如果你在网页打开后去喝了杯咖啡才去敲命令,可能会发现 ID 失效了。只需在网页上点击 Connect​ 重新发起请求,然后火速去服务器执行 openclaw devices approve --latest即可。
  • Docker 容器名不对:有些一键脚本创建的容器名可能不是默认的 openclaw-gateway。可以先运行 docker ps查看准确的容器名,然后再执行 docker exec -it <实际容器名> openclaw devices list
欢迎来到XiaoZou123,这里是一个电脑极客、数码爱好者网站。我平时喜欢关注数码新闻,研究计算机技术。如果你看我头像觉得我是二次元,那我其实还算不上!
最后更新于 2026-05-03