我有两个微服务,分别是A和B。在两个微服务的所有REST端点中,我都实现了JWT身份验证。用户必须使用用户名和密码访问端点(“ /登录”)并生成令牌,并将其作为RequestHeader传递给两个服务中的所有端点。 在微服务A中说,我有一个端点(“ test1 / createSomething”)。在B中,我还有一个端点(“ test2 / getSomething”)。现在,我可以使用Feign客户端在服务A的(“ test1 / createSomething”)中从服务B调用(“ test2 / getSomething”)。
但是我不确定如何以在服务A中生成JWT令牌并将其传递给服务B以使用其服务的方式实现这一点。
请帮助。微服务和探索事物的初学者。
答案 0 :(得分:0)
您可以尝试的一种方法是拥有单独的会话/ jwt服务。 该服务的角色和责任是存储/验证和认证具有以下端点的端点。
所以您可以拥有这样的流程:-
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进行验证。