已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
背景:我们是一套典型微服务架构,流量入口是 API 网关 → BFF → 各业务服务,服务间用服务网格做 mTLS 互信,网关层已完成 JWT 校验并把调用方身份(uid / tenantId)塞进 X-User-Id、X-Tenant-Id 这类 header 往下透传。
现象:最近一次越权复盘发现,某个内部服务(比如订单服务的 /internal/query 接口)直接读 X-User-Id 决定数据隔离,而它对"这个 header 是谁写的"完全没有校验——只要 mTLS 握手通过、来源是网关切面,就当成可信身份。问题是网关的某个旁路/降级分支(以及一次我们自己的压测脚本)能绕过网关鉴权直连内网网段,于是伪造 header 就能读到别人的订单。根因我判断是:mTLS 只证明了"对端是网关这个服务身份",却没证明"对端此刻代表的是哪个终端用户",身份从 mTLS 的"服务身份"偷换成了"用户身份"。
已尝试的排查与结果:
期望得到的答案形态: