已采纳
回答正文
回复
讨论正文
该问题的正文、回答与讨论。
【背景】 我负责一套 12 个微服务(Go 1.21 + gRPC),跑在 3 节点自建 K8s 1.28,无云。API 网关层统一做 JWT 验签,签发端是独立 auth 服务(Spring Boot 3.2 + jjwt 0.11.5,RS256 非对称)。
当前方案:
/oauth2/jwks),本地缓存公钥,TTL 1h安全审计新提的要求:令牌泄露后 30s 内必须可吊销(即吊销操作生效的端到端延迟 ≤ 30s),且吊销能力不能依赖"等 token 自然过期"。
【现象 / 卡点】 核心矛盾:
【已尝试的排查与结果】
GET blacklist:{jti},P99 增加约 1-2ms(本地 Redis 集群)。问题:Redis 挂了又回到 fail-open / fail-closed 的老问题,而且 blacklist 会随时间膨胀(1h TTL × 200 QPS ≈ 720k 条/h),需要额外的清理策略GET /revoke/check?jti=xxx 轻量接口(只查内存 LRU,不查 DB):比 introspection 快(P99 约 5ms),但仍然是每请求一次网络调用,且 auth 服务挂了就回到老问题【期望得到的答案形态】
【小结】 这道题的本质是:即时吊销(security)和零网络调用(performance)在单请求路径上天然冲突,我想知道社区里怎么在工程上把这两者的冲突"摊平"——是接受一个可控的 P99 增量,还是用异步/事件机制把吊销从请求路径上摘出去。