【问题标题】:Oauth 2 : Spring Boot - Separate Resource server protecting MicroservicesOauth 2:Spring Boot - 保护微服务的独立资源服务器
【发布时间】:2018-07-26 07:08:10
【问题描述】:

对于我最近的项目,我使用 Spring Boot 创建了一个单独的资源服务器。资源服务器的配置方式是,它将检查对 API 的 2 条腿和 3 条腿的访问,并验证 JWT 令牌。资源服务器是一个独立的spring boot jar,运行在其容器中。
我们使用 Spring Boot 创建了几个微服务,它们是可执行的 jar,在其容器中独立部署和运行。资源服务器将保护这些微服务中暴露的端点。为此,我在资源服务器中创建了一个 RestController,其中暴露了端点,它将在请求进来时调用微服务端点。例如
Microservice.java - 在端口 8080 上运行

@RequestMapping("/getUser")
public String getUserName(){
   return "xyz";
}

资源服务器 - 在 8090 端口运行
资源服务器控制器.java

@RequestMapping("/userInfo")
public String getUserName(){
 // calling above microservice using rest template
}

多个微服务中可以有多个端点,由于我们必须保护它们,在资源服务器的其余控制器中代理每个端点是否正确?我不确定这是否是正确的方法。我们想到的其他方法是创建一个 jar 资源服务器并部署为每个微服务的依赖项。这样,我们就不需要在 Resource Server 的 Rest Controller 中代理端点了。
只是想知道使用单独的资源服务器保护微服务的最佳方法。

【问题讨论】:

    标签: java spring-boot oauth-2.0 microservices


    【解决方案1】:

    JWT 是自包含令牌,可以存储 REST 服务用户的访问范围。 JWT 由授权服务器发出。在您的资源服务器中,您应该验证来自 REST 服务用户的每个请求。如果您的资源服务器在 spring-boot 上运行,您可以使用以下注释:

    @PreAuthorize("hasRole('ROLE_VIEW')")

    至于您的服务相互调用的部分,不需要使用 JWT,因为不涉及 REST 服务用户。 微服务可以通过简单的 BasicAuth、CORS 来保护,也可以将它们定位在一个网络中,而无需从外部网络访问

    【讨论】:

    • 谢谢,但我的问题是关于避免资源服务器所做的每个微服务中的重复验证代码。我想将这种逻辑保留在一个地方,并寻找实现它的最佳方法。
    【解决方案2】:

    不推荐共享库。微服务的一个巨大好处是独立性,如果你这样做,那将是一个折腾。

    更好的选择是查看您是否可以根据范围提供对 API 的访问。这样,当您的授权服务器发出 JWT 令牌时,它会为用户发送所有适用的范围。

    然后,在您的 Resource Server(s) 中,您可以使用 Spring Boot 中的以下注解启用对微服务的访问

       @PreAuthorize("#oauth2.hasScope('read')")
    

    另一种方法是,您可以创建角色并使用角色进行预授权。

    如果上述选项不起作用,那么您当前基于代理服务的方法非常好。您应该考虑的唯一方面是查看 JWT 令牌验证是否可以移动到相应的微服务中,以便保护您的所有服务。

    再次重申,当您实施微服务时,代码重复是完全没有问题的,如果这是您主要关心的问题,请不要犹豫,在每个服务中添加相同的逻辑。使用微服务,重复比错误的抽象要好

    【讨论】:

    • 检查用户是否有访问权限对我们来说不是问题。无论如何,我们会这样做,我对此很清楚。我们的资源服务器验证 JWT,如果我不通过代理方式,验证逻辑将在各种微服务中重复,但我想到了一个问题,那么资源服务器的需求是什么?
    • 资源服务器是托管 API 的实际微服务。它的功能之一是验证 JWT 令牌。
    猜你喜欢
    • 2019-04-29
    • 2020-02-12
    • 2019-04-05
    • 2018-05-15
    • 2016-01-18
    • 2018-07-08
    • 2020-03-23
    • 1970-01-01
    • 2016-06-06
    相关资源
    最近更新 更多