7.8. 增加外部存储


PropertyFileUserStorageProvider 示例实际有限。虽然我们可以与存储在属性文件中的用户登录,但我们将无法做更多操作。如果此提供程序加载的用户需要特殊的角色或组映射来完全访问特定应用程序,则无法向这些用户添加额外的角色映射。您还可以修改或添加额外的重要属性,如 email、first 和 last name。

对于这些类型的情况,红帽构建的 Keycloak 允许您通过在红帽构建的 Keycloak 数据库中存储额外信息来增加外部存储。这称为联邦用户存储,它封装在 org.keycloak.storage.federated.UserFederatedStorageProvider 类中。

UserFederatedStorageProvider

package org.keycloak.storage.federated;

public interface UserFederatedStorageProvider extends Provider,
        UserAttributeFederatedStorage,
        UserBrokerLinkFederatedStorage,
        UserConsentFederatedStorage,
        UserNotBeforeFederatedStorage,
        UserGroupMembershipFederatedStorage,
        UserRequiredActionsFederatedStorage,
        UserRoleMappingsFederatedStorage,
        UserFederatedUserCredentialStore {
    ...

}
Copy to Clipboard Toggle word wrap

UserFederatedStorageProvider 实例在 UserStorageUtil.userFederatedStorage (KeycloakSession) 方法上提供。它具有各种不同类型的方法来存储属性、组和角色映射、不同的凭证类型和所需操作。如果您的外部存储的 datamodel 无法支持完整的红帽构建的 Keycloak 功能集,则该服务可能会填补差距。

红帽构建的 Keycloak 附带了帮助程序类 org.keycloak.storage.adapter.AbstractUserAdapterFederatedStorage,它将把每个单个 UserModel 方法委托给用户联邦存储。覆盖需要覆盖的方法,以委派给外部存储表示。强烈建议您阅读此类的 javadoc,因为它有较小的保护方法,您可能需要覆盖。指定组成员资格和角色映射。

7.8.1. 多租户示例

在我们的 PropertyFileUserStorageProvider 示例中,我们只需要对我们的供应商进行简单的更改,以使用 AbstractUserAdapterFederatedStorage

PropertyFileUserStorageProvider

    protected UserModel createAdapter(RealmModel realm, String username) {
        return new AbstractUserAdapterFederatedStorage(session, realm, model) {
            @Override
            public String getUsername() {
                return username;
            }

            @Override
            public void setUsername(String username) {
                String pw = (String)properties.remove(username);
                if (pw != null) {
                    properties.put(username, pw);
                    save();
                }
            }
        };
    }
Copy to Clipboard Toggle word wrap

相反,我们定义了 AbstractUserAdapterFederatedStorage 的匿名类实现。setUsername () 方法对属性文件进行更改并保存。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat