Kong API Gateway 中的自定义身份验证服务

Rah*_*arg 4 authentication kong api-gateway

我们目前正在为我们的微服务分析 API 网关,Kong 是可能的候选者之一。我们发现 Kong 支持多种身份验证插件,但所有插件都基于存储在 Kong 数据库本身中的用户。我们需要将此责任委托给我们的自定义身份验证 HTTP 服务,并且不想将这些用户添加到 API 网关数据库中。

don*_*tin 5

可以使用一些代码来做到这一点,而不是使用 OpenID 连接插件;实际上,您需要实现一个授权服务器,它通过 Admin (8001) 端口与 Kong 对话,并授权使用具有外部给定用户 ID 的 API。

简而言之,它如下(此处为授权代码授予):

  • 不是直接向 Kong 询问令牌,而是通过请求获取特定 API 的令牌(硬编码或参数化,取决于您的需要)点击授权服务器,并将需要访问的应用程序的客户端 ID 包含在调用(您/authorize实际上实现了终点)
  • 授权服务器现在需要使用您需要的任何 IdP 进行身份验证,以便您在授权服务器中拥有经过身份验证的用户
  • 现在通过 Kong Admin API 获取 API 的配置代码,并点击/oauth2/authorize您的 Kong 网关(端口 8443)的端点,包括配置密钥;请注意,您可能还需要通过 Admin API 查找应用程序客户端 ID 的客户端密钥才能完成此工作
  • POSTto 中包含客户端 ID、客户端机密、经过身份验证的用户 ID(来自您的自定义 IdP)和可选范围/oauth2/authorize;这些值将使用应用程序现在可以使用授权代码声明的访问令牌添加到对 API 的后端调用
  • Kong 会给你一个授权码,你通过 302 重定向将它传回应用程序(你需要阅读 OAuth2 规范)
  • 该应用程序使用其客户端和密钥以及授权代码从 Kong 的端口 8443 URL 获取访问令牌(和刷新令牌)/oauth2/token

这听起来比最终更复杂。我为 wicked.haufe.io 做了这个,它基于 Kong 和 node.js,并为 Kong 添加了一个开源开发者门户。以下两个项目中有很多代码展示了如何与任何 IdP 集成:

我们目前正在调查是否还可以向 wicked 添加默认授权服务器,但现在您必须自己滚动/分叉。

也许这有帮助,马丁


Coo*_*per 0

查看 Kong 的 OpenID Connect 插件 getkong.org/plugins/openid-connect-rp - 它连接到外部身份和身份验证系统。