第 5 章 用户存储 SPI


您可以使用用户存储 SPI 为红帽构建的 Keycloak 编写扩展,以连接到外部用户数据库和凭证存储。内置的 LDAP 和 ActiveDirectory 支持是此 SPI 在操作中实现的。开箱即用,红帽构建的 Keycloak 使用其本地数据库来创建、更新和查找用户并验证凭证。通常,机构已有现有的外部专有用户数据库,它们无法迁移到红帽构建的 Keycloak 的数据模型。对于这样的情况,应用程序开发人员可以编写用户存储 SPI 的实现来桥接外部用户存储,以及红帽构建的 Keycloak 用来登录和管理它们的内部用户对象模型。

当红帽构建的 Keycloak 运行时需要查找用户时,比如当用户登录时,它会执行多个步骤来定位用户。首先查看用户是否在用户缓存中;如果用户找到了,则使用该内存中表示。然后,它会在红帽构建的 Keycloak 本地数据库中查找用户。如果没有找到用户,则会循环通过 User Storage SPI 供应商实施来执行用户查询,直到其中一个用户返回运行时查找的用户。供应商查询外部用户存储的用户,并将用户的外部数据表示映射到红帽构建的 Keycloak 用户 metamodel。

用户存储 SPI 供应商实现也可以执行复杂的条件查询,为用户执行 CRUD 操作,验证和管理凭证,或者一次性执行许多用户的批量更新。它取决于外部存储的功能。

用户存储 SPI 提供程序实施的打包并部署与 Jakarta EE 组件类似。默认情况下,它们不会被启用,但必须在管理控制台的 User Federation 选项卡中为每个域启用和配置。

警告

如果您的用户提供程序实施使用一些用户属性作为链接/建立用户身份的元数据属性,请确保用户无法编辑属性,并且相应的属性是只读。示例是 LDAP_ID 属性,它内置的红帽 Keycloak LDAP 供应商构建用于将用户 ID 存储在 LDAP 服务器端。请参阅 Threat 模型缓解章节中 的详细信息。

红帽构建的 Keycloak Quickstarts Repository 中有两个示例项目。每个快速入门都有一个 README 文件,其中包含如何构建、部署和测试示例项目的说明。下表提供了可用用户存储 SPI 快速入门的简单描述:

Expand
表 5.1. 用户存储 SPI Quickstarts
Name描述

user-storage-jpa

演示使用 JPA 实施用户存储提供程序。

user-storage-simple

演示使用包含用户名/密码密钥对的简单属性文件实施用户存储提供程序。

要连接到外部数据库,您应该为 Configure multiple datasources 指南中的 Red Hat build of Keycloak 属性使用 Red Hat build of additional datasources。

5.1. 访问新的实体管理器

为了简单访问红帽构建的 Keycloak 扩展数据,您可以获取这些快速入门中使用的附加数据源的 EntityManager。它可帮助您与为数据源指定的实体交互,因为它在 JPA 实体和数据库之间提供某种类型的网桥。

您可以使用新的实体管理器(用于 user-store 数据源),如下所示:

EntityManager em = session.getProvider(JpaConnectionProvider.class, "user-store").getEntityManager();
var user = em.find(org.your.extension.UserEntity.class, 123L);
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat