使用公共微服务对 API 网关 (Kong) 进行身份验证

Posted

技术标签:

【中文标题】使用公共微服务对 API 网关 (Kong) 进行身份验证【英文标题】:Authenticating Api Gateway (Kong) With A Public MicroService 【发布时间】:2018-03-10 15:19:40 【问题描述】:

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

有了这个新的 API,API 调用现在可以来自我们的网络应用之外的其他地方。所以我们要设置一个 API 网关来管理请求“负载”。例如,网关可以将用户的请求限制为每十分钟一次。

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

我知道这可能不是 API 网关最合乎逻辑的设置,通常您会在与 Kong 相同的私有网络上拥有微服务相互通信,并且不一定需要验证传入请求的真实性Kong会处理这个问题。但是,鉴于我们当前的设置,JWT 方法是否最有意义?

【问题讨论】:

你最后做了什么?我们有类似的设置。 【参考方案1】:

所以您希望您的 Kong 实例与您的上游服务器进行通信,其中包含一些只有您知道的秘密,这样您就可以确定上游服务器的流量来自您的 Kong 实例?

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

真的,这取决于您的上游服务器在请求验证方面支持什么。

您还提到向您的最终用户提供 API 密钥 - 我希望您会使用 https://getkong.org/plugins/key-authentication/ 来做到这一点。

【讨论】:

以上是关于使用公共微服务对 API 网关 (Kong) 进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

开源API网关Kong基本介绍和安装验证

kong个人分享(api网关)

微服务之API网关 kong 使用场景之路由功能

微服务之API网关:Kong:概要与安装

使用Kong和Konga管理微服务和API

对 Kong api 网关端点的基本身份验证请求出现 CORS 错误并且未找到预检