启用 OAuth2 插件
覆盖 218 个 route、168 个 service
结论先行
Kong 负责 token 与 scope,但资源访问阶段没有按 route 所需 scope 做授权判断。现有历史关系只能从 APILog 恢复“实际用过什么”,不能恢复“原本打算允许什么”。
数据来自 gateway-inner 当前 Kong Admin API、线上 kara-oauth2-v2 部署,以及 ES 中 label=kong_inner 的 90 天 APILog。
覆盖 218 个 route、168 个 service
隶属 152 个 consumer
另有 64 个当前 route 无调用
credential × route 去重结果
219 个 OAuth2 插件中 218 个启用。scopes 字段主要是 null,而不是业务权限定义。
OAuth2 credential 不受原签发 service 限制。结合资源访问阶段没有 scope guard,scope=all 在实践中就是跨 OAuth2 route 的广泛权限。
| ROUTE | PATH | MANDATORY |
|---|---|---|
ai.rp.oauth2.v1.0.0 | /api/v1.0.0/rp | 否 |
gateway.bin | /gateway/bin | 是 |
pto.fap.ai.com.oauth2.all.v1.0.0 | /api/v1.0.0/fap/pto | 是 |
ai.rp.common.oauth2.v1.0.0 | /api/v1.0.0/rp/common | 否 |
唯一 scopes=[] 的配置位于 ai.train.authorized_by_oauth2。它同样不是资源 required-scope 规则。
Kong 原生 OAuth2 插件会验证 token、有效期和 credential,并把 token.scope 写入 X-Authenticated-Scope;它不会判断当前 route 要求哪个 scope。
scope=all密码与 exchange 默认 all,device flow 固定 all。
granted=allgateway.bin 当前只允许签发 all。
required=?没有统一的 route + method scope enforcement。
当前配置允许的范围很大;APILog 证明的真实使用范围很小。收口不能直接继承全部潜在组合,也不能无观察期地只保留日志命中。
241 credential × 218 OAuth2 route。它代表当前可能访问的上限,不代表业务授权意图。
39,324,517 条 OAuth2 请求聚合所得;另有 628 个 credential-service 组合。
活跃 credential 每个使用 route 的中位数为 2,P90 为 13,最大为 64;102 个当前 credential 在日志保留期内没有调用。
线上 kara-oauth2-v2 镜像为 2026.07.27.17.43;它会直接读取 Kong OAuth2 credential 与 redirect_uri,但没有 client → allowed scopes 授权表。
旧客户端仍可以暂时请求 all,但网关要把它解释成“该 credential 的兼容权限集合”,而不是全部 route。
用 666 条观察关系建立 credential + route + method 清单;102 个无调用 credential、64 个无调用 route 单独确认。
新策略先只记录 would-deny,不阻断。补齐低频调用和负责人确认,冻结兼容授权集。
新 client 禁用 all;老 client 的 all 只命中兼容集。迁移完成后由 IdP 改发具体 scope。
IdP 限制“client 能申请哪些 scope”;网关限制“scope 能访问哪些 route + method”;Kong OAuth2 插件继续负责 token 签发和身份校验。
access token 有效期 2 小时;refresh token 有效期 14 天,reuse_refresh_token=false。仅停止新签发 all 不足以收口,因为 refresh 链可能继续保留 all。网关策略必须能约束既有 token,最终切换还要处理 refresh token 的迁移或撤销。
本报告只使用聚合字段,没有导出 authorization、apikey、refresh token、client_secret 或 request.body。
全局 tcp-log 会写入 request.body,ES mapping 还包含 authorization、apikey、refresh token、client_secret 等字段。后续盘点应继续只导出聚合结果和字段白名单,不应分发原始 APILog。