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

2022-09-01 15:52:09

也许这是一个奇怪的问题(我是微服务的新手)。但是我正在寻找有关如何继续此操作的一些信息。不需要特定于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/两个 -> http://myurlfortesting.com:8090/api/rest/servicetwo

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

这可以通过Springs Zuul(充当API网关)通过设置一些额外的过滤器来完成,还是在微服务端点中设置它?

甚至想知道是否有办法甚至不处理不通过 API 网关进入的微服务终结点上的直接调用。

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

非常感谢,

/D


答案 1

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

如果您想避免使用防火墙路由,则可以强制端点在转发请求之前检查特定的HTTP标头或Zuul设置的内容,但这会很麻烦并且容易规避。根据我过去的经验,“正确”的方法是通过防火墙做到这一点。你的应用应负责处理请求。防火墙应负责决定谁可以命中特定终结点。


答案 2

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

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