如何从使用另一个微服务的微服务传递JWT令牌?

时间:2020-02-15 16:34:34

标签: spring-boot jwt microservices spring-cloud jwt-auth

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

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

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

1 个答案:

答案 0 :(得分:0)

您可以尝试的一种方法是拥有单独的会话/ 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进行验证。

您可以查看类似的答案here。 另一个参考文献here