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

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

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

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

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

我的问题是保护上述案例 2 的配置文件和首选项服务的最佳方法是什么。我觉得有以下三种可能的方法:

  • 每个内部请求都需要包含任何身份验证
    跨当前用户上下文传递的 header
  • 每个内部请求都需要在其他一些地方进行身份验证
    作为 API 用户的方式
  • 每个内部请求都需要访问不同的端点
    未公开暴露并连接到内部负载平衡器中
    仅限流量

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

    最佳答案

    既然微服务带来了独立应用的思想,“智能应用和哑管道”,你已经可以摆脱解决方案 3。 ,这将需要某种基于网络的安全性。

    如果我可以用我自己的术语来翻译您的问题:

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

    剩下的两个解决方案:

  • App1调用App2时,App1将从Client收到的token转发给App2
  • 当 App1 调用 App2 时,App1 以自己的名称请求 token (客户端凭据授权),并将其传递给 App2

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

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

    关于spring - 在 Spring Boot 中保护内部微服务调用的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32480278/

    相关文章:

    java - Spring MVC 类无法转换为对象

    java - Spring Integration - 跨步骤共享锁

    java - aop :aspectj-autoproxy and tx:annotation-driven conflict in spring

    spring-boot-starter-parent 资源包括/排除说明

    java - 如何从单独的 Jar 加载 @Configuration 类

    spring-boot - 无法使用gradle和sts生成JPA元模型casse

    java - 使用运行时定义的配置按需实例化 Bean

    java - Spring 安全3 : Save informations about authentification in database

    java - Spring Security 找不到数据源

    java - 为什么 SessionDestroyedEvent 会触发两次?