我有一个项目,是使用 Restful 来调用底层的 OpenClaw, 最近总是抛出权限错误,scope: operator.write, 我让 Claude code 来来回回修改了三四十次,但是这个错误一直存在,换了模型,换了三个模型都没有解决这个问题,被迫从vibe coding,转为人工coding,一点点排查错误。
煎熬的24小时
开始先做手动测试:
curl -N http://127.0.0.1:18789/v1/chat/completions \
-H 'Authorization: Bearer 我的token' \
-H 'x-openclaw-client-id: openclaw-control-ui' \
-H 'x-openclaw-message-channel: webchat' \
-H 'Content-Type: application/json' \
-d '{
"model": "openclaw",
"stream": true,
"messages": [{"role":"user","content":"hi"}]
}'
测试结果是
{"ok":false,"error":{"type":"forbidden","message":"missing scope: operator.write"}}
我以为是 device Pairing 给的权限不够,完全手动修改pairing.json. 测试了半个多小时,没有办法.后来想,我可不可以在这里面用 device 的 token,跑不通, 然后增加 device ID,依然跑不通。
curl -N http://127.0.0.1:18789/v1/chat/completions \
-H 'Authorization: Bearer 4e19hJHjX7nVdbN1l2CIZGJqAp3CpFOL9027luo4Kc' \
-H 'x-openclaw-device-id: 46bb1f6d96926d059efccaa87015b038d30d0ef6f5115f594c69388d4328c6' \
-H 'Content-Type: application/json' \
-d '{
"model": "openclaw",
"stream": true,
"messages": [{"role":"user","content":"hi"}]
}'
然后尝试修改,尝试去查找原因,修改 OpenClaw 的源文件,改掉了它鉴权代码的部分,在auth之前强行插入权限。
if ((authMethod === "token" || authMethod === "password") && !scopes.includes('operator.admin')) {
scopes.push('operator.read', 'operator.write', 'operator.admin');
}
依然是不成功。
这样尝试失败,再尝试,再失败,在反反复复使用各种方案的过程中,过去了一天的时间。 OpenClaw 我又升级了,直到今天升级到 3.30 版本,依然有这个问题。 我最后猜测可能是版本号的原因。 所以我去让 AI 帮我分析前几个版本和这个版本的差异。
为什么在 3.24 能通,一到 3.28 就报 missing scope?
在 3.28 版本(也就是官方说的 Tokyo preclawcon release)发布前几天,安全团队连续披露了两个严重漏洞(CVE-2026-32919 和 CVE-2026-28473)。这两个漏洞的利用方式都是:黑客利用只有 operator.write 权限的普通凭证,绕过了 operator.admin 的校验,执行了越权操作(比如 /approve 危险系统命令或重置 Session)。
为了紧急封堵这两个 CVE,官方在 3.28 版本中对底层权限模型下了一剂“猛药”:极度收紧了无设备指纹(Device Identity)的 HTTP 请求权限。
根据官方 openclaw/SECURITY.md 的定义,HTTP API(/v1/chat/completions)本该把 Gateway Token 视为最高权限的 Operator。但在 3.28 的代码实现中出现了误伤:当你用原生 curl 或 OpenAI SDK 发起纯 HTTP 请求时,由于请求头里没有携带合法的 WebSocket 设备配对指纹,底层网关的安全校验逻辑会直接把你的权限数组清空(或者只给 read 权限),导致你在调用大模型对话时被拦截,抛出 missing scope: operator.write。
结论
我们可能优化太随意了,到现在为止还是一个还没有走入正轨的阶段,漏洞比较多,优化又随意。 所以基于openclaw的项目还是要谨慎地升级。