【发布时间】:2019-03-26 12:29:40
【问题描述】:
我正在寻找一个 API 管理系统,它将与 Keycloak 集成(Keycloak 应该提供所有身份验证)。 Wicked.io(基于kong)看起来不错。
我尝试将 oAuth2 添加为身份验证方法,但 wicked 不断生成自己的客户端 ID 和机密。
有没有什么方法可以用 wicked 做到这一点?
【问题讨论】:
标签: oauth keycloak kong api-management
我正在寻找一个 API 管理系统,它将与 Keycloak 集成(Keycloak 应该提供所有身份验证)。 Wicked.io(基于kong)看起来不错。
我尝试将 oAuth2 添加为身份验证方法,但 wicked 不断生成自己的客户端 ID 和机密。
有没有什么方法可以用 wicked 做到这一点?
【问题讨论】:
标签: oauth keycloak kong api-management
wicked.haufe.io 维护者在这里。
将 wicked/Kong 与 KeyCloak 结合起来可能不是一个好主意。 Wicked 解决了很多 KeyCloak 打算解决的问题,而且重叠很大,例如对 OAuth2 工作流程进行身份联合(SAML、OAuth2)等等。
KeyCloak 和 wicked/Kong 遵循不同的原则; KeyCloak 颁发令牌,这些令牌通过您服务中的 KeyCloak 库进行验证。这或多或少取代了 API 网关 - 它基于 KeyCloak 库在您的服务中实现。
wicked/Kong 作为对比的建立方式不同,最大的区别在于 wicked 在 Kong 之上提供的 API 门户,并且您拥有专用的 API 网关 (Kong)。 Wicked 为您提供它自己的客户端凭据,并且它还想要完成整个身份验证和授权位。您得到的交换是自助服务 API 门户;如果你不需要那个,你可能就不需要 wicked。
您可以做的是将 KeyCloak OAuth2 流联合到 wicked,方法是让 KeyCloak 充当 SAML 或 OAuth2 身份提供者。然后,您将 KeyCloak 授权服务器注册为具有 wicked 的身份提供者(使用单个服务提供者 (SAML) 或客户端 (OAuth2))。这里的“但是”是您仍然需要为您的服务提供一个入口点,该入口点不通过 KeyCloak 库。
wicked/Kong 总是这样工作:它消除了在您的服务中实现身份验证/授权的需要;相反,您需要检查标题 X-Authenticated-UserId 和 X-Authenticated-Scope。对于 wicked,这通常包含类似 sub=<some id> 的内容,这也取决于您配置 wicked 使用的身份提供者类型。但这种方法通常替换 KeyCloak。好处是您可以有一个单一的服务入口点(=Kong),并且您有一种非常轻量级的方式来保护任意服务 - 不仅是用 KeyCloak 支持的语言编写的服务! - 在 API 网关后面,同时通过 API 门户提供自助服务访问(带有可配置的计划、文档等)。
所有这些事情显然有些复杂; wicked 的使用非常灵活,但它并不是真的要与 KeyCloak 结合使用(同样如此。归根结底,这一切都归结为真正了解用例并找到一种解决方案架构,以最佳方式解决您的用例。
如果您的用例涉及 API 门户和 API 文档(应该),那么使用 wicked/Kong 可能是一个不错的选择。如果没有,您可能会更乐意坚持使用 KeyCloak(您可以将其视为具有您想要的去中心化网关的无头 API 管理系统)。
免责声明:我对 KeyCloak 的了解有些过时了;可能有更新也进入 API 门户方向,但我不知道。
【讨论】: