如何正确授权嵌套微服务调用

How to properly authorize nested microservice calls

我想了解授权嵌套服务调用的最佳做法。场景是客户端调用某个服务 A 来执行某个操作。服务A然后需要代表用户调用另一个服务B,所以它调用服务B。服务A然后调用另一个服务C。我想要的是:

  1. 服务 B 能够验证和授权服务 A 发出的请求
  2. 服务 C 能够验证和授权服务 A 发出的请求
  3. 服务 C 能够防止它被服务 B 代表用户调用

假设我想使用 OpenID Connect 令牌,支持上述 3 个要求的适当流程和令牌内容是什么?

好问题,答案与数据领域和 OAuth 范围有关。

访问令牌旨在在微服务之间传递,您不应该(默认情况下)每次 API 相互调用时都需要 运行 新的 OAuth 流程,这增加了复杂性,导致多个问题。

相反,每个 API 都应该验证 JWT 并检查对 API 的数据区域有意义的范围和声明。

一个好的设计是要保证:

  • 互联网客户使用的代币是保密的
  • APIs 使用的令牌可以包含丰富的声明并被转发

有关更多信息,请参阅以下 2 篇文章:

关于你的第 3 点,那里有一个特权,这取决于场景 - 例如,它可能是你公司的不同分支 - 在这种情况下,不同的令牌可能有意义。

大多数动态授权应该使用声明 - 在上面的范围文章之后有一篇声明最佳实践文章。