Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OAuth2:Spring引导-保护微服务的独立资源服务器_Java_Spring Boot_Oauth 2.0_Microservices - Fatal编程技术网

Java OAuth2:Spring引导-保护微服务的独立资源服务器

Java OAuth2:Spring引导-保护微服务的独立资源服务器,java,spring-boot,oauth-2.0,microservices,Java,Spring Boot,Oauth 2.0,Microservices,对于我最近的项目,我使用SpringBoot创建了一个单独的资源服务器。资源服务器的配置方式是,它将检查对API的两条腿和三条腿访问,并验证JWT令牌。资源服务器是一个独立的spring引导jar,在其容器中运行。 我们已经使用SpringBoot创建了几个微服务,它们是可执行的JAR,在容器中独立部署和运行。资源服务器将保护这些微服务中公开的端点。为此,我在资源服务器中创建了一个RestController,其中端点是公开的,当请求传入时,它将调用微服务端点。例如 Microservice.j

对于我最近的项目,我使用SpringBoot创建了一个单独的资源服务器。资源服务器的配置方式是,它将检查对API的两条腿和三条腿访问,并验证JWT令牌。资源服务器是一个独立的spring引导jar,在其容器中运行。
我们已经使用SpringBoot创建了几个微服务,它们是可执行的JAR,在容器中独立部署和运行。资源服务器将保护这些微服务中公开的端点。为此,我在资源服务器中创建了一个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控制器中的每个端点是否正确?我不确定这是否一个正确的方法。我们想到的另一种方法是创建资源服务器的jar,并将其作为每个微服务的依赖项进行部署。这样,我们就不需要在资源服务器的Rest控制器中代理端点。

只是想知道使用单独的资源服务器保护微服务的最佳方法。

不推荐使用共享库。微服务的一个巨大好处是独立性,如果你这样做的话,这将是一个挑战

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

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

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

如果上面的选项不起作用,那么当前基于代理服务的方法是非常好的。唯一需要考虑的方面是查看JWT令牌验证是否可以移动到相应的微服务,以便保护所有的服务。
同样,当您实现微服务时,代码重复是非常好的,如果这是您主要关心的问题,请毫不犹豫地在每个服务中添加相同的逻辑。对于微服务,复制比错误的抽象要好

共享库不是推荐的选项。微服务的一个巨大好处是独立性,如果你这样做的话,这将是一个挑战

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

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

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

如果上面的选项不起作用,那么当前基于代理服务的方法是非常好的。唯一需要考虑的方面是查看JWT令牌验证是否可以移动到相应的微服务,以便保护所有的服务。
同样,当您实现微服务时,代码重复是非常好的,如果这是您主要关心的问题,请毫不犹豫地在每个服务中添加相同的逻辑。对于微服务,复制优于错误的抽象

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

@预授权(“hasRole('ROLE\u VIEW')”)

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

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

@预授权(“hasRole('ROLE\u VIEW')”)

至于服务之间相互调用的部分,没有必要使用JWT,因为没有涉及REST服务用户。
微服务可以通过简单的BasicAuth、COR进行保护,或者在一个网络中定位它们,而无需从外部网络访问

检查范围用户是否有访问权限对我们来说不是问题。无论如何,我们会这样做,我对此很清楚。我们的资源服务器验证JWT,如果我不使用代理的方式,验证逻辑将在不同的微服务之间复制,但我想到的问题是,资源服务器的需求是什么?资源服务器是承载API的实际微服务。它的一个功能是验证JWT令牌。检查用户是否有访问权限对我们来说不是问题。无论如何,我们会这样做,我对此很清楚。我们的资源服务器验证JWT,如果我不使用代理的方式,验证逻辑将在不同的微服务之间复制,但我想到的问题是,资源服务器的需求是什么?资源服务器是承载API的实际微服务。它的一个功能是验证JWT令牌。谢谢,但我的问题是如何避免资源服务器在每个微服务中重复验证代码。我想把这种逻辑保持在一个地方,并寻找实现它的最佳方式。谢谢,但我的问题是
   @PreAuthorize("#oauth2.hasScope('read')")