spring-boot - 如何从使用另一个微服务的微服务传递 JWT 令牌?
问题描述
我有两个微服务,分别是 A 和 B。在这两个微服务的所有 REST 端点中,我都实现了 JWT 身份验证。用户必须使用用户名和密码访问端点(“/login”)并生成令牌并将其作为 RequestHeader 传递给两个服务中的所有端点。在微服务 A 中说,我有一个端点(“test1/createSomething”)。在 BI 中有另一个端点(“test2/getSomething”)。现在我可以使用 Feign 客户端在服务 A 中的 ("test1/createSomething") 中从服务 B 调用 ("test2/getSomething")。
但是我不确定如何以在服务 A 中生成 JWT 令牌并将其传递给服务 B 以使用其服务的方式来实现这一点。
请帮忙。微服务和探索事物的初学者。
解决方案
您可以尝试的一种方法是使用单独的会话/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 验证它。