我已经使用Keycloak好几年了,根据我的经验,有几种关于在Keycloak之间同步用户数据的场景
和您的应用程序的数据库:
您的应用程序是用户数据的所有者。
Keycloak 仅用于身份验证/授权目的。在这种情况下,您的应用程序会在需要时使用 admin Rest API 创建/更新 keycloak 用户。
Keycloak 是用户数据的所有者,除了数据库中的用户 ID 之外,您不需要更多信息。
在这种情况下,与用户有关的所有内容都可以由 Keycloak 管理(注册、用户帐户参数,甚至使用授权服务的资源共享)。
需要时可以通过数据库中的 userid 来引用用户。
注意:您可以使用用户属性轻松地向 Keycloak 中的用户添加自定义数据,但一种有趣的可能性是直接使用以下方法扩展用户模型:https://www.keycloak.org/docs/latest/server_development/index.html#_extensions_jpa
Keycloak 是用户数据的所有者,您需要的不仅仅是用户 ID(电子邮件、名字等)
如果性能不是问题,您可以在需要时通过 Admin Rest API 检索用户信息。
如果性能是一个问题,您将需要在应用程序的数据库中保留 Keycloak 用户数据的副本,并且您希望在每次用户更改时更新该副本。
为此,您可以在 keycloak 中实现回调(使用 SPI:https://www.keycloak.org/docs/latest/server_development/index.html#_events),这将在创建/更新用户时通知您的应用程序。
注意:您还可以使用变更数据捕获工具(例如 Debezium:https://debezium.io/)将 Keycloak 的数据库与您的数据库同步。
每种情况都有优点和缺点,您必须选择更适合您需求的一种:)