使用公共微服务验证Api网关(Kong)

时间:2017-09-28 19:09:16

标签: api microservices kong api-gateway

我们有一个可以通过互联网公开访问的网络应用程序。此应用程序在Web服务器上运行,该服务器包含应用程序可以调用的一整套API(包括用户身份验证)。我们希望公开一个" API" (例如,收集数据)供用户从他们自己的代码中查询有关其帐户的有限数据集。这将允许他们使用我们为他们收集的数据编写自定义仪表板。

使用这个新API,API调用现在可以来自我们的web-ap以外的其他地方。因此,我们希望设置一个API网关来管理请求" load"。例如,网关可以将用户的请求限制为每十分钟一次。

最终用户将获得一个API密钥以通过Kong发出请求,然后Kong将使用HTTP GET / POST为Web服务器执行API查询。由于我们的网络服务器是公开的,我们需要一种方法来验证API(收集数据)的请求是否仅来自Kong。我已经对JWT进行了一些研究,看起来似乎是一种可行的方法。简单地给Kong服务器提供由Web服务器发布的自己的JWT是否有意义?然后拒绝任何没有Kong JWT的网络服务器的GET / POST。

我知道这可能不是API网关最合乎逻辑的设置,通常你会在同一个私人网络上拥有微服务,因为Kong彼此之间进行通信,并且不一定需要验证即将发出的请求的真实性因为Kong会处理这个问题。但是,鉴于我们目前的设置,JWT方法最有意义吗?

1 个答案:

答案 0 :(得分:1)

因此,您希望您的Kong实例与您的上游服务器通信只有您知道的秘密,以便您可以确定上游服务器的流量来自您的Kong实例?

当然可以!有几种方法可以做到这一点。您可以使用https://getkong.org/plugins/request-transformer/添加包含一些秘密字符串的标头(然后在响应客户端之前可能使用https://getkong.org/plugins/response-transformer/删除该标头)。

实际上,这取决于您的上游服务器在请求验证方面支持的内容。

您还提到了为最终用户提供API密钥 - 我希望您使用https://getkong.org/plugins/key-authentication/来执行此操作。