OAuth 2:Spring Boot-独立的资源服务器保护微服务



对于我最近的项目,我使用Spring Boot创建了一个独立的资源服务器。资源服务器的配置方式将检查2条腿和3腿访问API,并验证JWT令牌。资源服务器是在其容器中运行的独立弹簧启动罐。
我们已经使用可执行罐子的弹簧启动创建了几个微服务,该罐子在其容器中独立部署和运行。资源服务器将保护这些微服务中暴露的终点。为此,我在Resource Server中创建了一个RestController,其中端点公开了,该端点会在请求进来时调用微服务终点。对于例如
microservice.java - 在端口8080

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

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

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

在几个微服务中可能有几个终点,并且由于我们必须保护它们,对资源服务器的剩余控制器中的每个终点代理每个终点是正确的吗?我不确定这是否是正确的方法。我们想到的其他方法是创建一罐资源服务器并将其部署为每个微服务的依赖性。通过这种方式,我们无需在资源服务器的REST控制器中代理终点。
只是想知道使用单独的资源服务器保护微服务的最佳方法。

共享库不是建议的选项。微服务的巨大好处是独立性,如果您这样做,那将会折腾。

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

然后,在资源服务器中,您可以在Spring Boot中使用以下注释启用微服务访问

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

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

如果上述选项无法解决,则您基于代理服务的当前方法非常好。您应该考虑的唯一方面是查看JWT令牌验证是否可以移至各自的微服务,以便您所有服务都受到保护。

再次,当您实现微服务时,代码重复元很好,如果这是您的主要问题,请随时在每个服务中添加相同的逻辑。使用微服务,重复比错误抽象

更好

jwt是独立的令牌,它可以为REST服务用户存储访问范围。JWT由授权服务器发出。在您的资源服务器中,您应该验证REST服务用户的每个请求。如果您的资源服务器在Spring-Boot上运行,则可以使用以下注释:

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

至于您的服务互相呼叫的部分,无需使用JWT,因为没有涉及的休息服务用户。微服务可以通过简单的基本功能确保,CORS或在一个网络中找到它们,而无需从外部网络访问

相关内容

最新更新