不允许直接调用微服务.仅允许通过API网关

Dim*_*man 12 java rest spring gateway microservices

也许这是一个奇怪的问题(我是微服务的新手).但我正在寻找有关如何继续这一点的一些信息.不需要特定于Spring,但这是我目前正在使用的框架.

示例:假设我们有两个微服务

a)http://myurlfortesting.com:8085/api/rest/serviceone

b)http://myurlfortesting.com:8090/api/rest/servicetwo

我们设置了Spring Zuul(充当API网关),其中包含以下转发来电的规则:

/ rest/one - > http://myurlfortesting.com:8085/api/rest/serviceone

/ rest/two - > http://myurlfortesting.com:8090/api/rest/servicetwo

问题是:有没有办法阻止用户直接访问A和B中提到的服务(只允许通过API网关提供的服务)?

可以通过设置一些额外的过滤器或者我们在微服务端点中设置它来使用Springs Zuul(充当API网关)吗?

甚至想知道是否有一种方法甚至不能处理不通过API网关的微服务端点上的直接调用.

也许这是通过服务器特定规则解决的,与Spring无关?

非常感谢,

/ d

Ash*_*ish 6

通常,通过实现适当的OAuth服务器来处理这种情况,其中只有您的API网关会处理令牌验证。对微服务的任何直接调用都不会进行正确的令牌交换,因此请求将被中止。

如果您已经在任何云上部署了微服务,则可以通过仅向API网关公开路由来实现这一点。是的,防火墙阻止,IP白名单是限制对微服务的访问的其他一些方法。


ind*_*ika 6

使用反向代理。我们使用 Nginx 也是出于同样的目的。在生产场景中,API 网关应始终部署在负载均衡器后面,以避免网关出现单点故障(如果它不是像 AWS API 网关这样的托管服务)。此外,网关和服务部署在 VPC 内,对公众不可见。 在此输入图像描述


Ria*_*Nel 5

假设您有防火墙,则可以将服务器的入站流量限制为Zuul终结点所暴露的端口,并禁止任何人直接访问微服务的端口。

如果要避免使用防火墙路由,则可以强制端点在转发请求之前检查特定的HTTP标头或Zuul设置的内容,但这很容易破解。根据我过去的经验,“正确”的方法是通过防火墙进行此操作。您的应用应负责处理请求。您的防火墙应负责确定哪些人可以攻击特定的端点。