【问题标题】:Use Keycloak`s users in own application在自己的应用程序中使用 Keycloak 的用户
【发布时间】:2018-03-31 20:47:53
【问题描述】:

我们有几个应用程序在其中使用自定义实施的安全性和用户管理。现在我们可能会改用 keycloak,因为它是一个更好的解决方案。

在每个应用程序中,我们在多个地方使用我们的用户模型,例如 Product (f.e. creator_id = 1) a.s.o. 类似的问题在这里被问到Keycloak and spring boot rest api - user specific data stragegy

我的问题是:

如何保留我们的用户模型,但使用 keycloak 进行身份验证和用户管理,而不将我们的用户迁移到 keycloak?以及如何同步用户注册过程(使用Keycloak)?一个有用的例子会非常有帮助。

【问题讨论】:

  • 看看my answer in this question 看看它是否适合你。我已经用了一段时间了,效果很好。
  • 我们会考虑的。谢谢。但要点之一是在数据库之间保持一致的状态。我不知道我们是否应该继续使用自定义提供程序来进行用户联合或其他事情

标签: database authentication oauth-2.0 keycloak


【解决方案1】:

我建议实施自定义用户存储 SPI (https://www.keycloak.org/docs/latest/server_development/index.html#_user-storage-spi),在每个用户登录时将用户数据从自定义数据库即时导入 Keycloak 的数据库。 在您的应用程序前面,您可以使用适当的 Keycloak 适配器和自定义过滤器/拦截器,将 Keycloak 特定的用户模型(参见 org.keycloak.KeycloakPrincipal)转换为您自己的用户模型。

我为几个客户做了这个,效果很好。使用这种方法,受保护应用程序的代码通常不需要更改。

对于用户注册过程,只需在 keycloak 登录页面上放置一个链接,将用户引导至您当前的注册实现。为此,您将需要 Keycloak 中的自定义登录主题。但是,您可能仍然需要该自定义方案才能将 Keycloak 登录页面自定义为您自己的外观。

【讨论】:

  • 感谢您提供好的建议/示例。是否可以通过keycloak注册用户,然后通过自定义SPI在自己的数据库中更新?
  • 使用用户存储 SPI 这是不可能的。您只能修改从外部用户存储导入的用户帐户并同步回这些更改。 User SPI 允许您替换整个内部 UserProvider。但我不建议用自定义实现替换它。它没有记录并且似乎是私有的(它位于组件 keycloak-server-spi-private 中)。
  • 好的,谢谢。那么另一种方法是“成功登录后”创建用户?即如果有一个新用户能够使用 keycloak 登录但不在本地存储(应用程序)中,则将创建该用户?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
  • 2015-05-14
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
相关资源
最近更新 更多