考虑以下场景:您有一个SSO服务(比方说Keycloak)和X应用程序,它们都有自己的数据库,在每个数据库中的某个地方,您引用的是一个user_id
。怎么处理这个?如何满足国外的约束问题?一个人应该同步密钥披风和应用程序吗?多么?什么是最佳实践?有什么经验?
发布于 2022-02-09 14:17:24
我已经使用Keycloak多年了,在我的经验中,有几种场景涉及在Keycloak和您的应用程序的数据库之间同步用户数据:
您的应用程序是用户数据的所有者.
Keycloak仅用于身份验证/授权目的。在这个场景中,您的应用程序在需要时使用admin创建/更新keycloak用户。
密钥披风是用户数据的所有者,您不需要比数据库中的userid更多的信息。
在这个场景中,与用户有关的一切都可以由Keycloak (注册、用户帐户参数,甚至使用授权服务共享资源)来管理。在需要时,用户将被数据库中的userid引用。
注意:您可以使用用户属性轻松地向密钥披风中的用户添加自定义数据,但一个有趣的可能性是使用以下内容直接扩展用户模型:https://www.keycloak.org/docs/latest/server_development/index.html#_extensions_jpa
密钥披风是用户数据的所有者,您需要的不仅仅是用户id (电子邮件、名字等)。
如果性能不是问题,您可以在需要时通过Admin检索用户信息。
如果性能有问题,您需要在应用程序的数据库中复制Keycloak的用户数据,并且希望在每次用户更改时更新该副本。为此,您可以在keycloak (使用SPIs:https://www.keycloak.org/docs/latest/server_development/index.html#_events)中实现回调,在创建/更新用户时通知应用程序。
注意:您还可以使用更改数据捕获工具(如Debezium:https://debezium.io/)来同步Keycloak的数据库和您的数据库。
每个场景都有优缺点,您必须选择一个更适合您的需求:)
https://stackoverflow.com/questions/71048265
复制相似问题