我们目前正在为我们的微服务分析 API 网关,而 Kong 是可能的候选者之一。我们发现 Kong 支持多个身份验证插件,但所有插件都基于存储在 Kong 数据库本身中的用户。我们需要将此责任委托给我们的自定义身份验证 HTTP 服务,并且不想将这些用户添加到 API 网关数据库中。
问问题
8919 次
2 回答
6
可以使用一些代码来执行此操作,而不是使用 OpenID 连接插件;实际上,您需要实现一个授权服务器,它通过 Admin (8001) 端口与 Kong 通信,并授权使用具有外部给定用户 ID 的 API。
简而言之,它如下(这里是授权码授予):
- 与其直接向 Kong 询问令牌,不如向授权服务器发出请求以获取特定 API 的令牌(硬编码或参数化,具体取决于您的需要),并将需要访问的应用程序的客户端 ID 包含在调用(
/authorize
实际上你实现了端点) - 授权服务器现在需要使用您需要的任何 IdP 进行身份验证,以便您在授权服务器中拥有经过身份验证的用户
- 现在通过 Kong Admin API 获取您的 API 的配置代码,并点击
/oauth2/authorize
您的 Kong 网关(端口 8443)的端点,包括配置密钥;请注意,您可能还需要通过 Admin API 查找应用程序客户端 ID 的客户端密码才能使其正常工作 POST
在to中包括客户端 ID、客户端密码、经过身份验证的用户 ID(来自您的自定义 IdP)和可选范围/oauth2/authorize
;这些值将使用应用程序现在可以使用授权代码声明的访问令牌添加到对 API 的后端调用- Kong 会给你一个授权码,你通过 302 重定向传回应用程序(你需要阅读 OAuth2 规范)
- 应用程序使用其客户端和密钥以及授权代码从 Kong 的 8443 端口 URL 获取访问令牌(和刷新令牌)
/oauth2/token
。
这听起来比最终更复杂。我为 wicked.haufe.io 做了这个,它基于 Kong 和 node.js,并向 Kong 添加了一个开源开发者门户。以下两个项目中有很多代码显示了与任何 IdP 集成可以做的事情:
- https://github.com/apim-haufe-io/wicked.portal-kong-adapter
- https://github.com/Haufe-Lexware/wicked.auth-passport
- https://github.com/Haufe-Lexware/wicked.auth-saml
我们目前正在调查是否也可以为 wicked 添加默认授权服务器,但现在您必须自己滚动/分叉。
也许这有帮助,马丁
于 2017-09-17T08:00:16.647 回答
0
查看 Kong 的 OpenID Connect 插件 getkong.org/plugins/openid-connect-rp - 它连接到外部身份和身份验证系统。
于 2017-08-11T03:48:13.543 回答