Skip to content

Admin HTTP RPC 插件适用于必须用 HTTP 请求/响应模式、无法保持 WebSocket 连接的宿主自动化场景。启用后通过 POST /api/v1/admin/rpc 暴露选定的网关控制面方法,但必须仅在 loopback、tailnet 或受信私有入口下使用。关键限制:插件默认关闭,启用后需重启网关;仅有 Authorization: Bearer <token> 等几种认证方式;请求体最大 1 MB。

OpenClaw Admin HTTP RPC 插件启用与排查指南

内置的 admin-http-rpc 插件在 OpenClaw 中可选启用,它通过 HTTP 暴露部分网关控制面方法,供无法使用标准 WebSocket RPC 客户端的宿主工具使用。

插件默认禁用。启用后会在网关监听端口上注册路由:

  • POST /api/v1/admin/rpc
  • 地址:http://<gateway-host>:<port>/api/v1/admin/rpc

只应在私有宿主工具、tailnet 自动化或受信内部入口内使用。不要直接暴露到公网

启用前提

Admin HTTP RPC 是一个完整的操作员控制面。任何通过网关 HTTP 认证的调用者都可以调用本文列出的允许列表方法。

仅在以下条件全部满足时使用:

  • 调用者被信任可以操作网关。
  • 调用者无法使用 WebSocket RPC 客户端。
  • 路由仅在 loopback、tailnet 或私有认证入口上可达。
  • 已审查允许的方法列表与你的自动化需求匹配。

对于能保持 WebSocket 连接的 OpenClaw 客户端和交互式工具,应优先使用 WebSocket RPC。

怎么启用 Admin HTTP RPC

启用内置插件:

CLI

```bash
openclaw plugins enable admin-http-rpc
openclaw gateway restart
```

Config

```json5
{
  plugins: {
    entries: {
      "admin-http-rpc": { enabled: true },
    },
  },
}
```

路由在插件启动时注册。修改插件配置后必须重启网关。

不再需要 HTTP 表面时,禁用并重启:

bash
openclaw plugins disable admin-http-rpc
openclaw gateway restart

怎么验证路由

使用 health 方法进行最小安全的测试请求:

bash
curl -sS http://<gateway-host>:<port>/api/v1/admin/rpc \
  -H 'Authorization: Bearer <gateway-token>' \
  -H 'Content-Type: application/json' \
  -d '{"method":"health","params":{&#125;&#125;'

成功响应包含 ok: true

json
{
  "id": "generated-request-id",
  "ok": true,
  "payload": {
    "status": "ok"
  }
}

插件禁用时,路由返回 404(因为未注册)。

认证方式

插件路由使用网关 HTTP 认证。

常见认证路径:

  • 共享密钥认证(gateway.auth.mode="token""password"):Authorization: Bearer &lt;token-or-password&gt;
  • 受信身份承载 HTTP 认证(gateway.auth.mode="trusted-proxy"):通过配置的身份感知代理,注入所需的身份头
  • 私有入口开放认证(gateway.auth.mode="none"):无需认证头

安全模型

将此插件视为完全的网关操作员表面。

  • 启用插件即有意提供对 /api/v1/admin/rpc 的允许列表管理 RPC 方法的访问。
  • 插件声明保留的 contracts.gatewayMethodDispatch: ["authenticated-request"] 清单合约,使其经过网关认证的 HTTP 路由可以在进程内分发控制面方法。
  • 共享密钥 Bearer 认证证明持有网关操作员密钥。
  • 对于 tokenpassword 认证模式,更窄的 x-openclaw-scopes 头被忽略,恢复为常规完全操作员权限。
  • 受信身份承载 HTTP 模式在 x-openclaw-scopes 存在时予以尊重。
  • gateway.auth.mode="none" 意味着如果启用插件,该路由未经认证。仅在你完全信任的私有入口后面使用。
  • 请求在经过插件路由认证后,通过相同的网关方法处理器和作用域检查分发(与 WebSocket RPC 相同)。
  • 保持此路由在 loopback、tailnet 或私有受信入口上。不要直接暴露到公网。
  • 插件清单合约不是沙箱。它们防止意外使用保留的 SDK 辅助工具;受信插件仍在网关进程中运行。

当调用者跨越信任边界时,使用独立的网关。

请求格式

http
POST /api/v1/admin/rpc
Authorization: Bearer <gateway-token>
Content-Type: application/json
json
{
  "id": "optional-request-id",
  "method": "health",
  "params": {}
}

字段说明:

  • id(字符串,可选):会原样复制到响应中。省略时生成 UUID。
  • method(字符串,必填):允许的网关方法名。
  • params(任意,可选):方法特定参数。

默认请求体最大 1 MB。

响应格式

成功响应使用网关 RPC 格式:

json
{
  "id": "optional-request-id",
  "ok": true,
  "payload": {}
}

网关方法错误使用:

json
{
  "id": "optional-request-id",
  "ok": false,
  "error": {
    "code": "INVALID_REQUEST",
    "message": "bad params"
  }
}

HTTP 状态码尽可能对应网关错误:例如 INVALID_REQUEST 返回 400UNAVAILABLE 返回 503

允许调用的方法

  • 发现:commands.list 返回此插件允许的 HTTP RPC 方法名。
  • 网关:healthstatuslogs.tailusage.statususage.costgateway.restart.request
  • 配置:config.getconfig.schemaconfig.schema.lookupconfig.setconfig.patchconfig.apply
  • 渠道:channels.statuschannels.startchannels.stopchannels.logout
  • Web:web.login.startweb.login.wait
  • 模型:models.listmodels.authStatus
  • 智能体:agents.listagents.createagents.updateagents.delete
  • 审批:exec.approvals.getexec.approvals.setexec.approvals.node.getexec.approvals.node.set
  • Cron:cron.statuscron.listcron.getcron.runscron.addcron.updatecron.removecron.run
  • 设备:device.pair.listdevice.pair.approvedevice.pair.rejectdevice.pair.remove
  • 节点:node.listnode.describenode.pair.listnode.pair.approvenode.pair.rejectnode.pair.removenode.rename
  • 任务:tasks.listtasks.gettasks.cancel
  • 诊断:doctor.memory.statusupdate.status

其他网关方法在被有意添加之前都会被阻止。

与 WebSocket RPC 对比

正常的网关 WebSocket RPC 路径仍是 OpenClaw 客户端首选的控制面 API。仅当宿主工具需要 HTTP 请求/响应模式时才使用 Admin HTTP RPC。

共享令牌的 WebSocket 客户端如果在连接时没有可信设备身份,不能自行声明管理员作用域。Admin HTTP RPC 刻意遵循现有的受信 HTTP 操作员模型:启用插件后,共享密钥 Bearer 认证被视为此管理表面的完全操作员访问权限。

常见问题

为什么 curl 请求返回 404 Not Found?

插件未启用、启用后未重启网关,或者请求发到了不同的网关进程。检查插件状态:openclaw plugins list,并确认已执行 openclaw gateway restart

401 Unauthorized 怎么解决?

请求未通过网关 HTTP 认证。检查 Bearer token 是否正确,或受信代理是否注入了所需身份头。如果 gateway.auth.mode 设置为 "none",则无需认证头,但请确保路由在完全受信的私有入口后。

请求体超过 1 MB 怎么办?

默认最大请求体大小为 1 MB。此限制不可通过 Admin HTTP RPC 插件配置。如果宿主工具需要传输更大负载,应改用 WebSocket RPC 或分片处理。

相关链接