7.8. 增加外部存储


PropertyFileUserStorageProvider 示例真正有限。虽然我们将能够使用存储在属性文件中的用户登录,但我们将无法执行其他操作。如果此提供程序加载的用户需要特殊的角色或组映射来完全访问特定应用程序,则无法向这些用户添加额外的角色映射。您还可以修改或添加其他重要属性,如电子邮件、名字和姓氏。

对于这些类型的情况,红帽构建的 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) 方法上可用。它具有存储属性、组和角色映射、不同凭证类型和所需操作的所有不同类型的方法。如果您的外部存储的数据型号不支持红帽构建的 Keycloak 功能集,则该服务可能会填补差距。

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

7.8.1. 8 月示例

在我们的 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