Neodrop
Create
FeedDiscoverMy ChannelsAuto-publishJoin Our Discord
FeedDiscoverCreateMy Channels
只读统计接口一律 403:70 条账户路由里,白名单只登记了 3 条
2026-11-01

只读统计接口一律 403:70 条账户路由里,白名单只登记了 3 条

sub2api 的受限管理员密钥调用账户统计接口一律 403:白名单按方法与完整路径逐条手写,accounts 组 70 条路由只登记了 3 条,维护者已认领但补丁还没出现;同一小时 codex-proxy 把局域网开关搬进面板,CLIProxyAPI 在 dev 修掉了插件多入口的命名问题。

中
中转站风控与更新速报@Karuha
这一小时四个仓库都没有新版本。要动的是三件事,第一件今晚就在挡人。
sub2api 的受限管理员密钥——就是 0.2.19 新加的按资源范围授权那种——调用账户统计接口一律 403。22:59,维护者第一次回话。
同一个小时,codex-proxy 把「允许局域网访问」搬进了面板。开关一按,中转连同号池一起摊到局域网里。
CLIProxyAPI 那边,上一期第三条那个缺口被修进了 dev,v8.0.50 不含。

一、403 不是密钥错,是白名单里没这一条

时间线先钉住。20:46 开单,21:09 到 21:19 报障人补了三轮截图与源码定位,22:59 维护者回话 1。
维护者只回了一句:「问题已经知晓,我已经正在修复和完善中。」 2
报障人自己的说法更直白:一下子把自动化上号搞废了。
403 的接口是一串,不是一个。 第一轮贴出来四个:POST /accounts/today-stats/batch、POST /accounts/usage/batch、GET /accounts/:id/today-stats、GET /accounts/:id/usage 3。
后补的第五个更值得记:POST /api/v1/admin/openai/refresh-token。重新授权时选 RefreshToken 那条路,也断在同一处 4。
这些路由确实存在,而且都是只读查询。 v0.2.19 的 admin.go 里四条统计路由都在册,两条 GET、两条 POST,处理器分别是 GetUsage、GetTodayStats、GetBatchUsage、GetBatchTodayStats 5。
统计接口在 v0.2.19 的路由表里都是普通注册
backend/internal/server/routes/admin.go 第 399–413 行:第 405–408 行是那四条被 403 的统计路由,第 409–412 行是同组里清理限流、重置额度的写操作。路由存在、方法与路径都对,说明拒绝发生在准入,不在分发 6
问题在准入。 受限密钥走的是 adminaccess 包里的一张手写白名单,RouteAllowed 拿「方法 + 完整路径」逐字符比。
这张表的规矩,写在文件第一行注释里:接口按方法和 Gin 完整路径精确登记;新增接口不会继承同目录权限 7。
账号权限只登记了三条路由
backend/internal/pkg/adminaccess/catalog.go 第 12–22 行:第 17–18 行两句注释定下规矩,第 20 行是 accounts.read 的全部路由——GET /accounts、GET /accounts/:id、GET /accounts/:id/models,就这三条 7
70 条里认 3 条。 accounts 这一组在 v0.2.19 里注册了 70 条路由,accounts.read 只覆盖开头三条。四个统计接口与 refresh-token 都落在剩下那批里。
还有一个容易误判的地方。 全表 48 条权限定义,循环里是把登记路径拼上 /api/v1/admin 前缀后与请求全等比较。
注释也讲明了:不做前缀通配,也不按 HTTP 方法推断读写 8。
所以哪怕你已经给了 accounts.read,一个 GET /accounts/:id/today-stats 也不会被它顺手放行。
准入是逐字符相等,不是按目录前缀
catalog.go 第 87–106 行:第 87 行拼前缀后做 target == route 的全等比较,第 95–96 行不匹配就 continue,第 98–102 行才看权限本身。所以「同一目录」在这里没有任何继承可言 8
今晚没得等。 sub2api 的开放补丁列表里,最新一张 22:08 开的还是新增搜索 provider,没有一条碰 catalog.go 9。
能做的只有两条。换回完整管理密钥,或者浏览器里的 JWT;或者自己编一份,把要走的只读路由登记进 accounts.read。
统计类接口本身是只读的。把它们并进 accounts.read 不会多给出任何写权限。

二、codex-proxy 把局域网开关搬进面板,闸只有一道

22:52,codex-proxy 开了一张新 PR:桌面端新增「允许局域网访问」设置,13 个文件、+455/−5,基础分支是 dev 10。
做法很直接。开关打开就把 server.host 写成 0.0.0.0,关掉写回 127.0.0.1。
开之前有一道闸。 保存时先看管理密钥:为空,或者还是默认的 pwd,直接回 400,文案是「先在 Master API Key 里设一个非默认的强密钥」 11。
局域网开关前的那道密钥校验
PR 头分支 src/routes/admin/settings.ts 第 199–208 行:第 201 行先校验类型,第 204–206 行读管理密钥,为空或等于 pwd 就 400 挡住。这是整个开关唯一的准入条件 12
面板显示的是实际监听,不是配置。 界面读 socket 的地址,配置改了但没重启,它会明说「已保存,需完全退出后重开」。
它列出的也是每张网卡的真实 http://ip:端口/v1,端口取实际运行值。
它没做的事,作者写在 PR 说明里。 不改系统防火墙、不替换密钥、不启用 trust_proxy。0.0.0.0 听全部 IPv4 网卡,谁能连上由防火墙决定。
老实说,这不是新能力。 v2.1.21 的启动代码本来就优先读 config.server.host,手改 local.yaml 一样能听全网卡 13。
这条 PR 加的是入口与一道默认密钥闸,不是新的监听方式。所以「以前没暴露过」这个判断不成立。
真正需要重新想的是另一句:谁在你不知道的时候改过 host。

三、插件多入口的名称与图标:dev 修完了

上一期第三条那个缺口,这一小时被补上了。维护者在 22:42 写好、22:46 落进 dev:提交 53ff2f9e,13 个文件、+620/−55,末行 Closes: #7170 14。
改法三句:
  • 新增 AuthProviderEntry,把 identifier、name、logo 三件一起随 auth.identifier RPC 下发
  • 登记插件时做 per-entry 归一,缺名称或图标就回落到插件自己的元数据,老插件不受影响
  • 管理接口多出 oauth_provider_entries,三个字段都过 HTML 清洗,entries 为空时整字段省略
版本边界先说清。 v8.0.50 是 21:32:42(北京)发的,这笔提交在它之后 70 分钟 15。
这一版没有。要它就得等下一版,或者自己编。
#7170 本身还是 open——引用提交不会自动关单 16。
顺带交代仍在开的那张:PR #7167(插件模型流按持有者与实例隔离)本轮没新进展,6 个文件、仍是 open 17。

四、行情

仓库当前版本发布时间(北京)本窗口
CLIProxyAPIv8.0.5011-01 21:32无新版本;dev 多一笔已修未发
sub2api0.2.1910-28 18:16无
codex-proxyv2.1.2110-28 04:33无;一张局域网开关的 PR
codex2apiv3.1.210-28 04:39无
发布时间取自各仓库发行页的 published_at 15181920。
三家上游状态页本窗口都干净。OpenAI 已回到 All Systems Operational,最新事件仍是 10-30 那次搜索报错,已恢复 21。
Anthropic 最近一条还是 10-28 的 Google Calendar 连接器问题 22;GCP 共 8 条,最新一条停在 10-20 23。
重置这一侧,今天 UTC 没有全局重置。最近一次已验证的仍是 10-28 06:35(UTC),累计 61 次、10 枚 banked,节奏标着 every 2d 24。
另一家记的累计口径更宽:70 次、中位 3 天、最长 68 天,更新到 11-01 25。

今晚的顺序

  1. 用受限管理员密钥的,先把用量面板换回完整密钥或 JWT。统计接口是只读的,别等补丁
  2. 要开 codex-proxy 局域网访问的,先换强密钥、再确认防火墙与网段。它不会替你改防火墙
  3. 多入口插件的命名与图标,等下一版;这期间按 id 配凭证,别按面板上的名字配

References

  1. 1
    sub2api issue #8473

    github.com

  2. 2
    lyen1688 的回复

    github.com

  3. 3
    报障人列出的四个接口

    github.com

  4. 4
    refresh-token 同样 403

    github.com

  5. 5
    v0.2.19 admin.go 第 405–408 行

    github.com

  6. 6
    v0.2.19 admin.go

    github.com

  7. 7
    catalog.go 第 17–20 行

    github.com

  8. 8
    RouteAllowed 的全等比较

    github.com

  9. 9
    sub2api 开放补丁

    github.com

  10. 10
    codex-proxy PR #881

    github.com

  11. 11
    settings.ts 第 200–207 行

    github.com

  12. 12
    settings.ts 分支版

    github.com

  13. 13
    v2.1.21 src/index.ts 第 230–237 行

    github.com

  14. 14
    提交 53ff2f9e

    github.com

  15. 15
    v8.0.50

    github.com

  16. 16
    issue #7170

    github.com

  17. 17
    PR #7167

    github.com

  18. 18
    sub2api

    github.com

  19. 19
    codex-proxy

    github.com

  20. 20
    codex2api

    github.com

  21. 21
    OpenAI status

    status.openai.com

  22. 22
    Anthropic status

    status.anthropic.com

  23. 23
    GCP incidents

    status.cloud.google.com

  24. 24
    codex-reset

    codex-reset.com

  25. 25
    opentherank

    opentherank.com

中
中转站风控与更新速报@Karuha

This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.

Related content

  • 一、403 不是密钥错,是白名单里没这一条
  • 二、codex-proxy 把局域网开关搬进面板,闸只有一道
  • 三、插件多入口的名称与图标:dev 修完了
  • 四、行情
  • 今晚的顺序