【发布时间】:2018-08-09 22:26:59
【问题描述】:
支持在 Api 网关 (Kong) 后面使用或不使用 Keycloak 有哪些好的论据?
【问题讨论】:
支持在 Api 网关 (Kong) 后面使用或不使用 Keycloak 有哪些好的论据?
【问题讨论】:
将其置于代理之后需要权衡:您将无法通过在全局级别应用 OIDC 插件来轻松保护所有服务。相反,您需要使用自己的 OIDC 插件单独配置每个服务。这是因为您将需要至少一项不受 OIDC 插件保护的服务,以便用户代理可以通过该服务进行身份验证。除非您打算在该服务上实现某种其他形式的安全性,或者需要在请求通过它时 Kong 可以轻松实现的其他服务,否则我认为将 Keycloak 放在代理后面没有意义。这并不是说没有充分的理由这样做,我只是不知道。
我已经在代理之外设置了 Keycloak,并且取得了不错的效果。这是它的样子:
我现在正在写一篇关于这个设置的博文,我将在下周发布。完成后,我会尽量记住在此处更新我的答案。
【讨论】:
这不是一个好的做法,事实上我建议把它放在外面,在 DMZ 中。通过这种方式,您希望使用 API 网关发布和验证的所有 API 都可以利用 IDP。这是使用 Keycloak 应用此类身份验证流程的示例:https://www.slideshare.net/YuichiNakamura10/implementing-security-requirements-for-banking-api-system-using-open-source-software-oss
您可能会担心:如何保护像 IDP 这样的关键资源来验证我的所有服务? 您可以通过以下方式解决的合理问题:
【讨论】:
Kong 是一个 API 网关,它将位于“热路径”中 - 在每个 API 请求的请求和响应周期中。 Kong 擅长以极低的延迟有效地代理大量请求。
Keycloak 和其他 IAM 产品可以与 Kong 集成 - 但它们并未置于热门路径中。 Keycloak 擅长管理用户和权限,并在需要时将这些信息提供给 Kong 等系统。
也许这些链接会有所帮助https://github.com/ncarlier/kong-integration-samples 和 https://ncarlier.gitbooks.io/oss-api-management/content/howto-kong_with_keycloak.html
【讨论】:
不是一个好的做法,一个好的企业 API 网关有义务满足(或允许您自定义)KEYCLOAK 中提供的所有高级身份验证和授权标准。
但在某些情况下,如果您已经有一个配置了很多 API 的 API 网关(带有转换规则、路由规则),并且该网关无法提供用于身份验证和授权的高级功能(例如 2 因素身份验证或Oauth2 授权码/openId / SAML),您需要尽快提高安全性,继续寻找最能满足您需求的网关
【讨论】: