【问题标题】:What is the best way to secure internal micro service calls in spring boot在 Spring Boot 中保护内部微服务调用的最佳方法是什么
【发布时间】:2015-12-05 11:10:26
【问题描述】:

我正在草拟一个简单的应用程序,它将包含三个松散耦合的服务:身份验证(在 spring 安全性下使用 OAuth2)、配置文件和首选项、数据收集。我正在尝试确定保护或架构这些服务之间安全调用的最佳方式。考虑以下两个用户案例。在每种情况下,用户都已经过身份验证,并且请求将包含一个有效的 JWT 令牌到初始服务端点:

案例 1:用户想要编辑他们对首选水果的偏好。应用程序将对 Profile/Preference 服务进行经过身份验证的调用以获取他们的首选项,然后 POST 回更新的首选项。

案例 2:他们向数据收集服务发出请求,该服务将轮询杂货店 API 以获取水果价格。这需要从个人资料和偏好服务中查找他们喜欢的水果。

我的问题是,为上述案例 2 保护个人资料和偏好服务的最佳方式是什么。我觉得有三种可能的方法:

  1. 每个内部请求都需要包含任何身份验证 标头传递当前用户上下文
  2. 每个内部请求都需要在其他一些地方进行身份验证 作为 API 用户的方式
  3. 每个内部请求都需要到达不同的端点,即 未公开暴露并连接到内部负载均衡器中 仅限流量

这是由 Spring Boot 的一个方面提供的开箱即用的东西吗?

【问题讨论】:

  • 如果出现 (3),您将在整个应用程序中创建单点故障。选项 (1) 似乎是最好的,因为那时您将使用 OAuth2 的功能并使用用户的上下文“为用户”执行操作。

标签: spring spring-security spring-boot spring-integration spring-security-oauth2


【解决方案1】:

由于微服务带来了独立应用程序的概念,即“智能应用程序和哑管道”,您已经可以摆脱需要某种基于网络的安全性的解决方案 3。。 p>

如果我可以用我自己的话翻译你的问题:

你想要做什么:客户端 -> App1 -> App2
问题:如何保护从 App1 到 App2 的调用

剩下的两个解决方案:

  1. App1调用App2时,App1将从Client收到的token转发给App2
  2. 当 App1 调用 App2 时,App1 以自己的名义请求一个令牌(客户端凭据授予),并将其传递给 App2

解决方案 2. 的问题是它可能会带来权限问题:
如果调用 App1 的客户端没有调用 App2 的权限(范围),则 App1 无论如何都会调用 App2,因为 App1 将以自己的名义拥有权限。

结论:解决方案 1. 是唯一可行的。

【讨论】:

  • 嗨,迈克尔!如果在解决方案 1 的上下文中,客户端不是实际客户端,而是另一个服务在使用其数据怎么办?鉴于这种情况,您认为应该怎么做?
  • 嗨@heisenberg,我选择的词可能很差,因为另一个服务也是 OAuth 术语中的客户端,但是您的问题在我的帖子中看起来像解决方案 2。如果 Service1 代表自己向 Service2 发起请求(不首先涉及最终用户),则 Service1 需要使用 OAuth Client Credentials grant 获取访问令牌。
猜你喜欢
  • 2022-09-28
  • 1970-01-01
  • 2011-01-17
  • 2011-11-20
  • 2019-09-05
  • 1970-01-01
  • 2019-05-11
  • 2017-01-22
  • 2020-09-26
相关资源
最近更新 更多