2017-10-19 159 views
0

我们有几个应用程序,我们使用自定义实现的安全和用户管理。现在我们可能会切换到keycloak,因为这是一个更好的解决方案。在自己的应用程序中使用Keycloak的用户

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

我的问题是:

我怎样才能保持我们的用户模型,但使用keycloak认证和用户管理不迁移我们的用户keycloak?以及如何同步用户注册的过程(与Keycloak)?一个有用的例子会非常有用。

+1

看看[我在这个问题上的答案](https://stackoverflow.com/questions/39259607/how-to-integrate-or-make-use-of-keycloak-user-database-in-my - 应用程序),看看它是否会为你工作。我一直在使用它,它一直运行良好。我们会考虑一下 – stdunbar

+0

。谢谢。但其中一点是在数据库之间保持一致的状态。我不知道我们是否应该继续为用户联盟提供自定义提供程序或者其他什么 – x4k3p

回答

3

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

我为几个客户做了这个,它工作得很好。通过这种方法,受保护的应用程序的代码通常不需要改变。

对于用户注册过程,只需在keycloak登录页面上放置一个链接,将用户引导至您当前的注册实施。您需要在Keycloak中使用cutom登录主题。不过,无论如何,您可能需要自定义方案来自定义Keycloak登录页面,以自己的外观&的感觉。

+0

感谢您提供一个很好的提案/示例。是否可以通过keycloak注册用户,然后通过自定义SPI更新自己的数据库? – x4k3p

+1

对于用户存储SPI,这是不可能的。您只能修改从外部用户存储器导入的用户帐户并将这些更改同步回去。 有__User SPI__允许您替换整个内部UserProvider。但我不建议用自定义实现来替换它。它没有记录,似乎是私有的(它驻留在组件keycloak-server-spi-private中)。 – Boomer

+0

好的,谢谢。所以另一种方法是在成功登录后创建用户?即如果有新用户能够使用keycloak登录但不在本地存储(应用程序)中,用户将被创建? – x4k3p

相关问题