7.8. 增加外部存储
PropertyFileUserStorageProvider 示例实际有限。虽然我们可以与存储在属性文件中的用户登录,但我们将无法做更多操作。如果此提供程序加载的用户需要特殊的角色或组映射来完全访问特定应用程序,则无法向这些用户添加额外的角色映射。您还可以修改或添加额外的重要属性,如 email、first 和 last name。
对于这些类型的情况,红帽构建的 Keycloak 允许您通过在红帽构建的 Keycloak 数据库中存储额外信息来增加外部存储。这称为联邦用户存储,它封装在 org.keycloak.storage.federated.UserFederatedStorageProvider 类中。
UserFederatedStorageProvider
UserFederatedStorageProvider 实例在 UserStorageUtil.userFederatedStorage (KeycloakSession) 方法上提供。它具有各种不同类型的方法来存储属性、组和角色映射、不同的凭证类型和所需操作。如果您的外部存储的 datamodel 无法支持完整的红帽构建的 Keycloak 功能集,则该服务可能会填补差距。
红帽构建的 Keycloak 附带了帮助程序类 org.keycloak.storage.adapter.AbstractUserAdapterFederatedStorage,它将把每个单个 UserModel 方法委托给用户联邦存储。覆盖需要覆盖的方法,以委派给外部存储表示。强烈建议您阅读此类的 javadoc,因为它有较小的保护方法,您可能需要覆盖。指定组成员资格和角色映射。
7.8.1. 多租户示例 复制链接链接已复制到粘贴板!
在我们的 PropertyFileUserStorageProvider 示例中,我们只需要对我们的供应商进行简单的更改,以使用 AbstractUserAdapterFederatedStorage。
PropertyFileUserStorageProvider
相反,我们定义了 AbstractUserAdapterFederatedStorage 的匿名类实现。setUsername () 方法对属性文件进行更改并保存。