我想在不同的微服务之间进行通信,但是出现的问题是微服务使用jwt令牌进行了保护,而我却找不到从第一个微服务向其他微服务发送安全呼叫的方法。有没有一种方法可以直接与service方法通信,因为如果我打开api,它将被滥用。
或者我必须经过api网关才能通过api门方式发送每个请求,并从那里进行安全的通信。
答案 0 :(得分:1)
这完全取决于您的项目的确切要求。
网关API通常用于向通常有1个端点进行对话的外部用户隐藏微服务的复杂性。
网关还可以处理安全性并验证用户身份(许多公司确实这样做)。
现在,当您通过网关并且经过身份验证的请求到达客户端时,通常您已经在请求上拥有了用户身份(网关在请求中添加了用户身份)。
所以您知道用户“ John Smith”触发了请求。
现在,如果您需要调用另一个微服务,则应该决定(并再次决定):
是否需要身份验证(也许不必在微服务之间确保内部通信的安全性(
如果您确实需要微服务之间的身份验证,谁会对请求进行身份验证? 如果它是网关,则所有身份验证逻辑都存在,但是您必须为每个请求进行额外的跃点,这可能会增加成本 或者,如果它是直接调用,则每个微服务必须实现一个authenticatat逻辑。当然,有诸如Spring Security之类的东西,其他语言/生态系统也有类似的解决方案,但是总的来说这很难实现。
如果您确实进行了从微服务A到微服务B的身份验证调用,并且该流是由触发了对服务A的请求的用户John Smith发起的,则应确定该调用的语义是否为:
在技术实施方面,通常可以使用所需令牌将JWT标头添加到请求中。如果请求已经过身份验证,并且您需要生成用户身份,则只需在请求上放置几个标头即可。
答案 1 :(得分:0)
你可以有两个api网关:
暴露在外部的令牌验证令牌并将声明发送到微服务,这些声明用于验证路由保护。
在微服务通信之间,使用第二个网关发送您已经拥有的声明。希望这可以帮助。如果您找到任何替代方法,请告诉我们。