敏感接口

“敏感接口”通常指对高风险 Open API(如群发、广播、批量导入、内容发布)做额外的审批、白名单或独立配额。本项目的自托管控制台没有按接口的敏感标记/审批流;可用替代手段是接口级限流、服务开通、回调同步拦截与敏感词。

概念​

需求当前可用的真实能力缺口
限制某接口调用频率「接口调频」per-operation QPS,超限 429/1008无按角色的接口配额
关闭高风险能力「服务开通」8 个 ServiceKey无接口级开关
发送前人工/风控审批CB01 同步回调 message.publish.before,可 pass/replace/block无通用 HTTP 审批中间件
内容过滤敏感词 block/replace无图片/音视频审核模型
调用者身份限制RBAC 子账号(控制台管理面)Open API 无 per-key 权限细分
  • Open API 鉴权只有 AppKey 签名,没有按接口的 scope;任何持有 AppSecret 的调用方都能调全部已开通接口。
  • 控制台的 RBAC 只约束 /api/admin/**,不约束 Open API。
  • 需要“敏感接口”治理时,建议在应用服务器前置一层网关做鉴权、审批与限流。
未实现,不伪造入口

控制台没有“敏感接口”配置页或 admin 接口;本页只说明现有替代控制,避免按不存在的端点接入。

前置条件​

  • 服务端已启动(默认 http://127.0.0.1:8080),控制台入口 http://127.0.0.1:8080/console/#ratelimit(tab #ratelimit:接口调频)。
  • 请求头 X-Admin-Secret 与服务端 IM_ADMIN_SECRET 一致(本地默认 dev-admin)。
  • 已在控制台选中应用;带 {appkey} 的接口都按应用隔离。
  • 自托管版无购买、计费、套餐、续费与发票流程(不适用项);本页只覆盖配置、查询与治理接口。

步骤​

  1. 盘点高风险接口

    如 message.broadcast、message.system.publish、user.batch.get、group.import。

  2. 配置接口限流

    在「接口调频」为这些 operation 设置较低 QPS,超限返回 429 + Retry-After。

  3. 叠加发送前拦截

    启用回调同步决策,应用服务器对高风险发送返回 block。

  4. 网关层补权限

    在自有网关按调用方/场景做接口白名单;不要依赖不存在的服务端 scope。

参数表​

替代能力方法与路径说明
接口限流POST /api/admin/apps/{appkey}/ratelimit{overrides:{operationId:qps}}
服务开关POST /api/admin/apps/{appkey}/services关闭整类能力
同步回调POST /api/admin/apps/{appkey}/callbackssyncEnabled/syncTimeoutMs/syncDefaultAction
敏感词POST /api/admin/apps/{appkey}/sensitive-words{words,action}

示例​

给广播接口单独限流​

Shell
curl -sS -X POST "http://127.0.0.1:8080/api/admin/apps/demo/ratelimit" \
  -H 'X-Admin-Secret: dev-admin' \
  -H 'content-type: application/json' \
  -d '{"overrides":{"message.broadcast":1,"message.system.publish":5}}'

curl -sS -X GET "http://127.0.0.1:8080/api/admin/apps/demo/ratelimit" \
  -H 'X-Admin-Secret: dev-admin'

启用同步回调做发送前拦截​

Shell
curl -sS -X POST "http://127.0.0.1:8080/api/admin/apps/demo/callbacks" \
  -H 'X-Admin-Secret: dev-admin' \
  -H 'content-type: application/json' \
  -d '{"enabled":true,"url":"https://example.com/im/callback","events":["message.publish.before"],"syncEnabled":true,"syncTimeoutMs":500,"syncDefaultAction":"block"}'

常见问题​

有没有接口级白名单?​

没有。Open API 签名密钥是应用级;请用网关或应用服务器做调用方鉴权。

限流能按用户吗?​

不能。限流键是 (appkey, operationId) 的 1 秒滑动窗口。

同步回调能拦所有消息吗?​

配置 message.publish.before 并启用 syncEnabled 后,消息投递前会等待应用决策或超时。

以后会加敏感接口页吗?​

当前未排期;本页不会为未实现能力提供假端点。

相关链接​