spring Sping Boot -当2个微服务相互通信时,另一个微服务如何验证JwT令牌

7gcisfzg  于 2023-09-29  发布在  Spring
关注(0)|答案(1)|浏览(133)

我很难找到答案。当我有两个Sping Boot 微服务应用程序,微服务A和微服务B,并且它们都相互通信时,我遇到了一个问题。当微服务A在身份验证后生成JWT令牌并将响应与JWT令牌沿着发送给微服务B时,微服务B如何验证JWT令牌以确保其有效性?我知道微服务A已经验证了JWT令牌,但是当它发送JwT令牌时,微服务B也需要在收到时验证它。有人能帮我回答问题,并提供例子来帮助我理解吗?此外,如果有任何可用的Google资源,请在这里分享,因为它们对我的学习课程很有帮助。谢谢你

w8rqjzmb

w8rqjzmb1#

如果你需要两个微服务安全地相互通信,最常见的方法是有第三方。
这样想吧,当你要向政府申请护照时,你通常需要带一个家庭成员来为你担保,告诉你你就是你声称的那个人。
首先,你需要三个不同的团队:

  • 认证服务器
  • 资源服务器1(微服务A)
  • 资源服务器2(微服务B)

如果你使用的是JWT,流程如下:

  • 微服务A调用身份验证服务器,提供他们的客户端ID和客户端密钥,以证明他们是他们声称的那个人。
  • 身份验证服务器对客户端(微服务A)进行身份验证,然后发出一个使用身份验证服务器的私钥签名的短期JWT(通常为几分钟)。
  • 微服务A获取JWT并调用包含令牌的微服务B
  • 微服务B使用身份验证服务public key来验证所提供的JWT的签名。

资源服务器获取认证服务器公钥的方法主要有两种。你可以在启动时通过配置文件等方式将它提供给服务器。这通常使得在JWT泄漏或任何其他安全原因的情况下,如果需要,则更难旋转密钥。
另一种方法是进行设置,以便授权服务器公开一个JWK端点,这是一个REST端点,服务器可以调用它来动态获取公钥。
例如,所有服务器可能每30分钟调用一次auth服务器来获取公钥,这意味着我们可以轮换密钥,30分钟后所有服务器将自动获取新密钥。
因此,就像在真实的生活中一样,我们需要一个第三方认证服务器,可以为这两种服务提供担保。

相关问题