如何从另一个微服务 Java 使用 JWT 安全微服务

Posted

技术标签:

【中文标题】如何从另一个微服务 Java 使用 JWT 安全微服务【英文标题】:How to consume a JWT secured microservice from another microservice Java 【发布时间】:2020-07-06 22:37:31 【问题描述】:

我的应用程序有几个微服务,包括:Auth、Game 和 Group。 当我按下前端(播放)上的按钮时,我正在调用 Group rest api 方法,比如说 foo()。 为了在 Group 中实现 foo(),我需要 GET 调用 Game rest api,但它是安全的。

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

@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


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

所以我的问题是如何让 Group 微服务能够调用 Game 微服务。

谢谢。

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

【问题讨论】:

这通常不是您实现系统到系统通信的方式。例如,Oauth 对用户到系统和系统到系统的通信有不同的流程。 【参考方案1】:

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

你可以做的是:

    为您的 Group 服务上的传入呼叫添加一个拦截器,它将 JWT 存储在 request context 中。 为您的游戏服务的传出调用添加一个拦截器,该拦截器将获取 request context 中的 JWT 并将其添加到请求标头中。

这里重要的是request context

【讨论】:

以上是关于如何从另一个微服务 Java 使用 JWT 安全微服务的主要内容,如果未能解决你的问题,请参考以下文章

如何给运行在 SAP BTP 上的 Java 微服务增添访问控制功能

微服务 - 如何使用 JWT 对单独的 API 微服务进行身份验证

如何在微服务架构中实现基于角色的安全性

具有 OAuth 2 和 JWT 安全性的 Spring Boot 微服务

使用 JWT 的微服务认证和授权

oauth 2.0、JWT、Spring 安全、微服务