微服务间调用应传播access token还是使用client-credentials授权?
微服务间调用权限方案选择参考
两种方案不存在绝对的对错,具体要结合你的业务诉求判断:
令牌中继(传播原始用户access token到inventory服务)
适用场景
- 需要在inventory服务层做用户级权限校验,比如仅特定等级/权限的用户可触发库存扣减
- 全链路请求需要绑定原始用户身份,用于操作审计、日志溯源等场景
注意事项
- 原始用户token的
scope必须包含updateInventory接口的访问权限 - 需要提前处理token过期问题,避免调用inventory时原始token已失效
- order和inventory服务必须使用同一套认证中心的签名校验规则
client_credentials 授权流
适用场景
updateInventory接口仅对内部可信服务开放,不直接暴露给终端用户,不需要校验调用方的用户身份,只需要校验调用方是不是合法的内部服务- 希望降低内部服务调用的耦合度,不需要处理用户token过期、权限范围不匹配等问题
注意事项
- 给order服务分配最小权限,仅开放
updateInventory相关的调用权限,避免权限溢出 - 如果inventory服务需要记录操作关联的用户信息,由order服务将用户ID作为业务参数传递即可,不需要依赖令牌中的用户信息
推荐选择
如果没有强用户级权限校验、全链路用户身份溯源的需求,优先选择client_credentials方案,内部调用的稳定性更高,维护成本更低。如果有上述需求,则选择令牌中继方案。
内容的提问来源于stack exchange,提问作者zilcuanu
相关产品推荐
相关产品推荐

