7.3. 模型接口


功能 接口 中定义的大多数方法都返回,或以用户的表示形式传递。这些表示由 org.keycloak.models.UserModel 接口定义。需要应用程序开发人员才能实施此接口。它为外部用户存储和红帽构建的 Keycloak 使用的用户 metamodel 之间提供了映射。

package org.keycloak.models;

public interface UserModel extends RoleMapperModel {
    String getId();

    String getUsername();
    void setUsername(String username);

    String getFirstName();
    void setFirstName(String firstName);

    String getLastName();
    void setLastName(String lastName);

    String getEmail();
    void setEmail(String email);
...
}

UserModel 实现提供对用户的读取和更新元数据的访问,包括用户名、名称、电子邮件、角色和组映射等内容,以及其他任意属性。

org.keycloak.models 软件包中的其他模型类代表 Red Hat build of Keycloak metamodel: RealmModel,RoleModel,GroupModel, 和 ClientModel

7.3.1. 存储 Ids

UserModel 的一个重要方法是 getId () 方法。在实施 UserModel 时,开发人员必须了解用户 ID 格式。格式必须是:

"f:" + component id + ":" + external id

红帽 Keycloak 运行时构建通常必须根据用户 ID 查找用户。用户 id 包含足够的信息,因此运行时不必查询系统中的每个单一 UserStorageProvider 来查找用户。

组件 id 是从 ComponentModel.getId () 返回的 id。组件Model 在创建供应商类时作为参数传递,以便您可以从那里获取它。外部 id 是您的供应商类需要在外部存储中查找用户的信息。这通常是用户名或 uid。例如,它可能类似如下:

f:332a234e31234:wburke

当运行时按 id 进行查找时,将解析 id 来获取组件 ID。组件 id 用于找到最初用于加载用户的 UserStorageProvider。然后,该提供程序通过 id。此提供程序再次解析 id 以获取外部 ID,它将使用 在外部用户存储中定位用户。

这个格式具有可为外部存储用户生成长 ID 的缺陷。这在与 WebAuthn 身份验证 结合使用时,这特别重要,这会将用户处理 ID 限制为 64 字节。因此,如果存储用户使用 WebAuthn 身份验证,则务必要将完整的存储 ID 限制为 64 个字符。method validateConfiguration 可用于在创建时为提供程序组件分配简短 ID,为 64 字节限制的用户 ID 提供一些空间。

    @Override
    void validateConfiguration(KeycloakSession session, RealmModel realm, ComponentModel model)
            throws ComponentValidationException
    {
        // ...
        if (model.getId() == null) {
            // On creation use short UUID of 22 chars, 40 chars left for the user ID
            model.setId(KeycloakModelUtils.generateShortId());
        }
    }
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.