首页 > 解决方案 > 如何正确授权嵌套的微服务调用

问题描述

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

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

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

标签: oauth-2.0jwtopenid

解决方案


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

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

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

一个好的设计是确保以下几点:

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

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

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

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


推荐阅读