首页 > 解决方案 > 如何从使用另一个微服务的微服务传递 JWT 令牌?

问题描述

我有两个微服务,分别是 A 和 B。在这两个微服务的所有 REST 端点中,我都实现了 JWT 身份验证。用户必须使用用户名和密码访问端点(“/login”)并生成令牌并将其作为 RequestHeader 传递给两个服务中的所有端点。在微服务 A 中说,我有一个端点(“test1/createSomething”)。在 BI 中有另一个端点(“test2/getSomething”)。现在我可以使用 Feign 客户端在服务 A 中的 ("test1/createSomething") 中从服务 B 调用 ("test2/getSomething")。

但是我不确定如何以在服务 A 中生成 JWT 令牌并将其传递给服务 B 以使用其服务的方式来实现这一点。

请帮忙。微服务和探索事物的初学者。

标签: spring-bootjwtmicroservicesspring-cloudjwt-auth

解决方案


您可以尝试的一种方法是使用单独的会话/jwt 服务。该服务的角色和职责是存储/验证和验证具有以下端点。

  • create_token() :使用给定的输入数据(比如用户信息、到期时间等)创建新的 JWT 令牌
  • is_token_valid() :检查令牌是否有效

所以你可以有这样的流程:-


 1. First hit to login-service > login service getting token from jwt-service > returning jwt token to UI/client.
 2. UI/Client passing received jwt token to service-b via headers> which indeed pass jwt token to service-a, where each service independently calls is_token_valid() of jwt-service and process the request only after getting success response. 

要在 spring-boot 中实现这一点,您可以做的是添加一个拦截器层,该拦截器层在每个 Controller 类之前被调用,其中读取标头,提取 jwt-token 并从 jwt-service 验证它。

您可以在此处查看类似的答案。这里的另一个参考


推荐阅读