Authentication 香港API网关中的自定义身份验证服务

Authentication 香港API网关中的自定义身份验证服务,authentication,kong,api-gateway,Authentication,Kong,Api Gateway,我们目前正在分析微服务的API网关,Kong是可能的候选者之一。我们发现Kong支持多个插件进行身份验证,但所有插件都基于存储在Kong数据库中的用户。我们需要将这一职责委托给我们的自定义身份验证HTTP服务,并且不希望在API网关数据库中添加这些用户 查看Kong的OpenID连接插件getkong.org/plugins/OpenID-Connect-rp-它连接到外部身份和身份验证系统。可以通过一些代码来实现这一点,而不是使用OpenID连接插件;实际上,您需要实现一个授权服务器,该服务器

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

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

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

简言之,它如下所示(授权代码授予):

  • 不要直接向Kong请求令牌,而是点击授权服务器,请求获取特定API的令牌(硬编码或参数化,取决于您的需要),并在调用中包含需要访问的应用程序的客户端ID(实际上您实现了
    /authorize
    端点)
  • 授权服务器现在需要使用您需要的任何IdP进行身份验证,以便您在授权服务器中拥有经过身份验证的用户
  • 现在通过Kong Admin API获取API的设置代码,并点击Kong网关(端口8443)的
    /oauth2/authorize
    端点,包括设置密钥;请注意,您可能还需要通过AdminAPI查找应用程序客户机id的客户机机密,以实现此功能
  • POST
    /oauth2/authorize
    中包括客户id、客户机密、经过身份验证的用户id(来自您的自定义IdP)和可选范围;这些值将使用应用程序现在可以使用授权代码声明的访问令牌添加到对API的后端调用中
  • Kong将返回一个授权代码,您可以通过302重定向将其传递回应用程序(您需要为此阅读OAuth2规范)
  • 应用程序使用其客户机和密码以及授权代码从Kong的端口8443 URL
    /oauth2/token
    获取访问令牌(和刷新令牌)
这听起来比最后更复杂。我这样做是为了wicked.haufe.io,它基于Kong和node.js,并为Kong添加了一个开源开发者门户。以下两个项目中有大量代码,说明了如何与任何IdP集成:

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


也许这会有帮助,马丁

谢谢你的回答。我肯定会更深入地研究这些建议。如果我已经有了一个微服务,它处理身份验证(用户+密码)、授权(用户是否有权访问特定资源)和注册(将用户添加到与此微服务相关的用户数据库中),该怎么办。有没有办法将用户服务与香港整合?这一级别的用户交互似乎更具体于应用程序。这听起来像是您可以而且可能应该使用OAuth2解决的问题,这是一个倒退,通常将授权抽象为作用域。从你在这里所说的,很难判断你的服务是如何做到的。理想情况下,您的API只需通过预先收集的信息从香港获得授权和身份验证。这通常是可能的,但并非总是如此。我很清楚,我必须让我的用户微服务更像是OAuth2服务器,并让kong从那里使用它?另外,我假设我不能仅仅创建一个与我的用户microservice直接交互的自定义插件,或者这会不会太混乱?我可以肯定地看到OAuth2场景在哪里会更干净。我没有在评论中这样做,而是为您的链接问题添加了一个答案: