如何使用来自另一个微服务Java的JWT安全微服务

如何使用来自另一个微服务Java的JWT安全微服务,java,spring,spring-boot,jwt,microservices,Java,Spring,Spring Boot,Jwt,Microservices,我的应用程序有几个微服务,包括:身份验证、游戏和组。 当我按下前端(Play)上的按钮时,我正在调用组RESTAPI方法,比如foo()。 为了在组内实现foo(),我需要获取调用游戏RESTAPI,但它是安全的 当我登录React应用程序时,我从/login(Auth)获取JWT令牌并将其存储在localstorage中。然后我成功地使用它从组中调用foo(),但在foo()实现中,我还需要使用jwt令牌,以便能够从游戏中获取信息 @Configuration //+component sca

我的应用程序有几个微服务,包括:身份验证、游戏和组。 当我按下前端(Play)上的按钮时,我正在调用组RESTAPI方法,比如foo()。 为了在组内实现foo(),我需要获取调用游戏RESTAPI,但它是安全的

当我登录React应用程序时,我从/login(Auth)获取JWT令牌并将其存储在localstorage中。然后我成功地使用它从组中调用foo(),但在foo()实现中,我还需要使用jwt令牌,以便能够从游戏中获取信息

@Configuration
//+component scans...
public class GroupConfiguration {

    @Bean
    @LoadBalanced
    public WebClient.Builder buildWebClientBuilder() {

        return WebClient.builder();
    }
}


@RestController
@RequestMapping("/groups")
public class Controller {

    private final Logger logger = LogManager.getLogger();

    @Autowired
    private WebClient.Builder webClientBuilder;

private int getMinimumNumberOfPlayers(int gameId) {

        try {
            return webClientBuilder.build()
                    .get()
                    .uri("http://game-service/games/minimumNumberOfPlayers/2")
                    .retrieve()
                    .bodyToMono(Integer.class)
                    .block();
        } catch (NullPointerException|WebClientResponseException e) {
            e.printStackTrace();
            return 0;
        }
    }

...

// foo() frontend calls foo(). foo it's using getMinimumNumberOfPlayers


GetMinimumNumberOfPlayer()用于组中的foo()方法。它应该根据id检索一个游戏的最少玩家数量,但是游戏微服务是jwt安全的,我得到了一个未经授权的错误

所以我的问题是,我怎样才能让群微服务能够称之为游戏微服务

谢谢

编辑:
我就是这样解决的。

即使我有一些安全问题,我也会回答这个问题:

你能做的是:

  • 为组服务上的传入呼叫添加一个拦截器,该拦截器将JWT存储在
    请求上下文中
  • 为您的游戏服务添加传出呼叫拦截器,该拦截器将在
    请求上下文中获取JWT,并将其添加到请求头中

  • 这里重要的是
    请求上下文

    即使我有一些安全问题,我也会回答这个问题:

    你能做的是:

  • 为组服务上的传入呼叫添加一个拦截器,该拦截器将JWT存储在
    请求上下文中
  • 为您的游戏服务添加传出呼叫拦截器,该拦截器将在
    请求上下文中获取JWT,并将其添加到请求头中

  • 这里重要的是
    请求上下文

    ,这通常不是实现系统间通信的方式。例如,Oauth对于用户到系统和系统到系统的通信有不同的流程。这通常不是实现系统到系统通信的方式。例如,Oauth对于用户到系统和系统到系统的通信具有不同的流。