微服务到微服务的安全通信

时间:2020-03-04 06:44:29

标签: java spring jwt microservices communication

我想在不同的微服务之间进行通信,但是出现的问题是微服务使用jwt令牌进行了保护,而我却找不到从第一个微服务向其他微服务发送安全呼叫的方法。有没有一种方法可以直接与service方法通信,因为如果我打开api,它将被滥用。

或者我必须经过api网关才能通过api门方式发送每个请求,并从那里进行安全的通信。

2 个答案:

答案 0 :(得分:1)

这完全取决于您的项目的确切要求。

网关API通常用于向通常有1个端点进行对话的外部用户隐藏微服务的复杂性。

网关还可以处理安全性并验证用户身份(许多公司确实这样做)。

现在,当您通过网关并且经过身份验证的请求到达客户端时,通常您已经在请求上拥有了用户身份(网关在请求中添加了用户身份)。

所以您知道用户“ John Smith”触发了请求。

现在,如果您需要调用另一个微服务,则应该决定(并再次决定):

  1. 是否需要身份验证(也许不必在微服务之间确保内部通信的安全性(

  2. 如果您确实需要微服务之间的身份验证,谁会对请求进行身份验证? 如果它是网关,则所有身份验证逻辑都存在,但是您必须为每个请求进行额外的跃点,这可能会增加成本 或者,如果它是直接调用,则每个微服务必须实现一个authenticatat逻辑。当然,有诸如Spring Security之类的东西,其他语言/生态系统也有类似的解决方案,但是总的来说这很难实现。

  3. 如果您确实进行了从微服务A到微服务B的身份验证调用,并且该流是由触发了对服务A的请求的用户John Smith发起的,则应确定该调用的语义是否为:

    • 用户“ John Smith”与服务B联系,或者...
    • 服务A代表用户John Smith与服务B联系。 如果您具有任何类型的权限系统,这对于授权确实非常重要。
  4. 在技术实施方面,通常可以使用所需令牌将JWT标头添加到请求中。如果请求已经过身份验证,并且您需要生成用户身份,则只需在请求上放置几个标头即可。

答案 1 :(得分:0)

你可以有两个api网关:

  • 一个暴露在外面
  • 另一个用于容器内的微服务通信。

暴露在外部的令牌验证令牌并将声明发送到微服务,这些声明用于验证路由保护。

在微服务通信之间,使用第二个网关发送您已经拥有的声明。希望这可以帮助。如果您找到任何替代方法,请告诉我们。