2018 年 6 月 17 日 作者:Marek Posolda
Red Hat Summit 是年度最重要的活动之一。许多技术爱好者、Red Hat 员工和客户都有很好的机会相聚一堂,学习新知识,并参加许多有趣的演讲和培训。在今年的峰会期间,有几个分组会议专门讨论了 Keycloak 和 Red Hat SSO。您可以查看这篇博文了解更多详情。
Red Hat Summit 最重要的部分之一是 Keynote 演示,它展示了主要的要点和未来战略。通常,它们也包含 Red Hat 使用的最有趣技术的演示。
在星期四上午的 Keynote 演讲中,有一个演示展示了包含 3 个云(Azure、Amazon、私有云)的混合云的实际应用!其中涉及许多技术和有趣的项目。 其中,让我们列举一下 Red Hat JBoss Data Grid (JDG)、OpenWhisk 或 Gluster FS。RH-SSO(基于 Keycloak 项目的 Red Hat 产品)也很荣幸被使用。
演示的前端是一个简单的手机游戏。RH-SSO 在第一阶段用于验证手机游戏用户的身份。每位与会者都有机会亲自尝试。总共有 1200 名游戏玩家。
前端有一个负载均衡器,每个用户都会自动转发到 3 个云之一。移动应用程序使用 RH-SSO Javascript 适配器 (keycloak.js) 与 RH-SSO 通信。
对于 Javascript 应用程序,整个 OpenID Connect 登录流程发生在浏览器中,因此可以依赖粘性会话。因此,由于使用了 Javascript 适配器,您可能会认为我们可以进行“简单”设置,并让所有 3 个云中的 RH-SSO 实例彼此独立,并让它们各自使用单独的 RDBMS 和 infinispan 缓存。下图显示了这种设置的样子:
通过这种设置,每个云仅了解在其自身上创建的用户和会话。这对于粘性会话来说很好,但如果 3 个云之一发生故障/移除,则不适用于故障转移场景。它还存在其他问题——例如,管理员和用户只能看到在特定云上创建的会话。还存在潜在的安全问题。例如,当管理员在一个云上禁用用户时,用户在其他云上仍然处于启用状态,因为对用户的更改不会传播到其他云。
因此,我们更希望展示更合适的、了解复制的设置。也是因为演示的一部分是展示故障转移的实际操作。3 个云之一(Amazon)被关闭,先前在 Amazon 中登录的用户被重定向到剩余的 2 个云之一。重点是最终用户无法识别任何更改。因此,先前在 Amazon 中登录的用户必须仍然能够在 Azure 或私有云中刷新其令牌。这反过来意味着数据(用户、用户会话和缓存)需要了解所有 3 个云。
在 Keycloak 3.X 中,我们添加了对跨数据中心(跨站点)设置的支持,其中使用外部 JDG 服务器在数据中心之间复制数据(RH-SSO 7.2 中的技术预览)。演示正是使用了这种设置。每个站点都有 JDG 服务器,所有 3 个站点都通过这些 JDG 服务器相互通信。这是标准的 JDG 跨 DC 设置。下图显示了演示的样子:
JDG 服务器在演示期间不仅用于 RH-SSO,还用于演示的其他部分。详细信息在 Sebastian Łaskawiec 的 JDG 设置博客 中进行了描述。JDG 服务器设置为 ASYNC 备份,这更有效,并且对于演示目的来说完全没问题,因为移动应用程序使用了 keycloak.js 适配器。有关更多详细信息,请参阅 RH-SSO 文档。
RH-SSO 使用标准的 RH-SSO openshift 镜像 。对于跨 DC 设置,我们需要按照 RHSSO 文档 中所述进行配置更改。还进行了一些其他定制。
RH-SSO 跨 DC 设置目前需要复制的 RDBMS 和复制的 JDG 服务器。在准备演示时,我们发现使用在所有 3 个云中复制的 OpenShift 集群式 RDBMS 并非易事。
幸运的是,RH-SSO 是一个高度可定制的平台,除其他外,它还提供了受支持的 用户存储 SPI,允许客户插入自己的存储来存储 RH-SSO 用户。因此,我们没有设置复制的 RDBMS,而是创建了自定义 JDG 用户存储。因此,示例 realm 的用户保存在 JDG 内部,而不是 RDBMS 数据库中。
我们吸取的教训是,我们希望使 Keycloak/RH-SSO 跨 DC 设置对于管理员来说更简单。因此,我们正在考虑完全消除对复制的 RDBMS 的需求,而是将所有 realm 和用户元数据存储在 JDG 中。因此,只需复制 JDG 即可满足跨 DC 设置的要求。
为了演示的目的,我们制作了自定义登录主题。我们还制作了仅电子邮件验证器,允许用户仅通过提供其电子邮件地址进行注册。这显然不是很安全,但对于示例目的来说非常简洁。Keynote 用户还可以使用 Google 身份提供商 或 Red Hat 开发者 OpenID Connect 身份提供商 登录,这对于已经在这些服务中拥有帐户的用户很有用。
如果您想尝试所有这些实际操作,您可以尝试查看我们在 Github 上的 演示项目 并将其部署到您自己的 openshift 集群!如果您有 3 个云,那就更好了!您可以尝试包括 JDG 的完整设置,以完全尝试我们在 Keynote 演示期间使用的设置。