在spring boot中保护内部微服务调用的最佳方法是什么

时间:2015-09-09 13:01:30

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

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

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

案例2:他们向Data Collection服务发出请求,该服务将在杂货店API中查询水果价格。这需要从个人资料和偏好服务中查找他们喜欢的水果。

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

  1. 每个内部请求都需要包含任何身份验证 标题以传递当前用户上下文
  2. 每个内部请求都需要在其他内容中进行身份验证 作为API用户的方式
  3. 每个内部请求都需要命中一个不同的端点 没有在内部负载均衡器中公开暴露和连线 仅限交通
  4. Spring Boot的一个方面提供了开箱即用的东西吗?

1 个答案:

答案 0 :(得分:-1)

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

如果我可以用自己的方式翻译您的问题:

您想要做什么:客户 - > App1 - >应用2
问题:如何保护从App1到App2的呼叫

剩下的两个解决方案:

  1. 当App1调用App2时,App1会将从客户端收到的令牌转发给App2
  2. 当App1调用App2时,App1以其自己的名称(客户端凭据授予)请求一个令牌传递给App2
  3. 解决方案2。的问题在于它可能带来权限问题:
    如果调用App1的客户端没有调用App2的权限(范围),App1将会调用App2,因为App1将拥有自己名称的权限。

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