10.2. 配置缓存


Red Hat build of Keycloak 提供了一个缓存配置文件,该文件位于 conf/cache-ispn.xml

缓存配置是常规的 {infinispan_configuring_docs}[Infinispan 配置文件]。

下表提供了红帽构建的 Keycloak 使用的特定缓存概述。您可以在 conf/cache-ispn.xml 中配置这些缓存:

Expand
缓存名称缓存类型描述

realms

Local

缓存持久的域数据

users

Local

缓存持久的用户数据

授权

Local

缓存持久的授权数据

keys

Local

缓存外部公钥

crl

Local

X.509 authenticator CRL 的缓存

work

复制

在节点间传播无效消息

authenticationSessions

分布式

缓存身份验证会话,在身份验证过程中创建/销毁/过期

会话

分布式

缓存持久的用户会话数据

clientSessions

分布式

缓存持久的客户端会话数据

offlineSessions

分布式

缓存保留离线用户会话数据

offlineClientSessions

分布式

缓存保留离线客户端会话数据

loginFailures

分布式

跟踪失败的登录、欺诈检测

actionTokens

分布式

缓存操作令牌

10.2.1. 缓存类型和默认值

本地缓存

红帽 Keycloak 的构建会在本地缓存持久数据,以避免对数据库进行不必要的往返。

使用本地缓存将以下数据保存在集群中的每个节点中:

  • 域和 相关数据,如客户端、角色和组。
  • 用户和 相关数据,如授权角色和组成员身份。
  • 授权和 相关数据,如资源、权限和策略。
  • keys

域、用户和授权的本地缓存配置为默认容纳最多 10,000 个条目。本地密钥缓存每默认值最多可容纳 1,000 个条目,默认为每小时过期。因此,密钥会被强制从外部客户端或身份提供程序定期下载。

为了实现最佳运行时并避免对数据库的额外往返,您应该考虑查看每个缓存的配置,以确保最大条目数与数据库的大小一致。您可以缓存更多条目,通常服务器需要从数据库获取数据。您应该评估内存利用率和性能之间的利弊。

本地缓存无效

本地缓存提高了性能,但在多节点设置中添加了一个挑战。

当一个红帽构建的 Keycloak 节点更新共享数据库中数据时,所有其他节点都需要了解它,因此它们会导致数据从其缓存中无效。

工作 缓存是一种复制缓存,用于发送这些失效消息。这个缓存中的条目/消息非常短,您不应该预期这个缓存的大小会随时间增长。

身份验证会话

每当用户尝试进行身份验证时,都会创建身份验证会话。身份验证过程完成后或达到其过期时间后会自动销毁。

authenticationSessions 分布式缓存用于存储身份验证会话,以及在身份验证过程中与其关联的任何其他数据。

通过依赖可分布式缓存,身份验证会话可供集群中的任何节点使用,以便用户可以重定向到任何节点,而不会丢失其身份验证状态。但是,生产环境就绪的部署应始终考虑会话关联,而是将用户重定向到初始创建会话的节点。通过这样做,您要避免节点间不必要的状态传输,并改进 CPU、内存和网络利用率。

用户会话

经过身份验证后,将创建一个用户会话。用户会话跟踪您的活跃用户及其状态,以便他们可以无缝地向任何应用程序进行身份验证,而无需再次要求其凭证。对于每个应用程序,用户使用客户端会话进行身份验证,以便服务器可以根据应用程序跟踪用户通过 进行身份验证的应用程序及其状态。

当用户执行注销时,用户和客户端会话都会自动销毁,客户端会执行令牌撤销,或者因为达到它们的过期时间而被销毁。

会话数据默认存储在数据库中,并按需载入到以下缓存:

  • 会话
  • clientSessions

通过依赖可分布式缓存,缓存的用户和客户端会话可供集群中的任何节点使用,以便用户可以重定向到任何节点,而无需从数据库加载会话数据。但是,生产环境就绪的部署应始终考虑会话关联,而是将用户重定向到初始创建会话的节点。通过这样做,您要避免节点间不必要的状态传输,并改进 CPU、内存和网络利用率。

对于用户会话和客户端会话的内存缓存,默认为每个节点,10000 个条目会减少红帽构建的 Keycloak 的总内存用量。内部缓存将只为每个缓存条目使用一个所有者运行。

离线用户会话

作为 OpenID Connect Provider,服务器能够对用户进行身份验证并发布离线令牌。在身份验证成功后发出离线令牌时,服务器会创建一个离线用户会话和离线客户端会话。

以下缓存用于存储离线会话:

  • offlineSessions
  • offlineClientSessions

与用户和客户端会话缓存一样,离线用户和客户端会话缓存默认限制为每个节点 10000 条目。根据需要,从内存驱除的项目将从数据库根据需要加载。

密码过期强制检测

loginFailures 分布式缓存用于跟踪失败登录尝试的数据。对于在多节点红帽构建的 Keycloak 设置中工作,Brute Force Protection 功能需要这个缓存。

操作令牌

当用户需要异步确认操作(例如,忘记密码流发送的电子邮件中)时,可以使用操作令牌。actionTokens 分布式缓存用于跟踪有关操作令牌的元数据。

10.2.2. volatile 用户会话

默认情况下,常规用户会话存储在数据库中,并按需加载到缓存中。可以配置红帽构建的 Keycloak,以仅将常规用户会话存储在缓存中,并最小化对数据库的调用。

由于此设置中的所有会话都存储在内存中,因此与此相关的两个副作用:

  • 当所有红帽构建的 Keycloak 节点重启时,会丢失会话。
  • 增加了内存消耗。

在使用易失性用户会话时,缓存是用户和客户端会话的真实来源。Red Hat build of Keycloak 会自动调整可在内存中存储的条目数量,并增加副本数以防止数据丢失。

警告

由于可能较高的内存用量,不建议在大量使用离线会话时使用易失性用户会话。对于易失性会话,可以在内存中缓存时间离线会话,使用 SPI 选项 spi-user-sessions-​infinispan-​offline-client-session-cache-entry-lifespan-overridespi-user-sessions-​infinispan-​offline-session-cache-entry-lifespan-override

按照以下步骤启用此设置:

  1. 使用以下命令禁用 persistent-user-sessions 功能:

    bin/kc.sh start --features-disabled=persistent-user-sessions ...
    Copy to Clipboard Toggle word wrap
注意

启用 多站点功能时,无法禁用 persistent- user-sessions

10.2.3. 配置缓存最大大小

为了减少内存用量,可以将上限放在存储在给定缓存中的条目数。要在缓存上指定 的上限,您必须提供以下命令行参数 --cache-embedded-${CACHE_NAME}-max-count=,用 ${CACHE_NAME} 替换要应用上限的缓存名称。例如,要将上限 1000 应用到 offlineSessions 缓存,您需要 configure --cache-embedded-offline-sessions-max-count=1000。在以下缓存上不能定义上限: actionToken,authenticationSessions,loginFailures,work

在启用易失性会话时,不支持为 会话clientSessionsofflineSessionsofflineClientSessions 设置最大缓存大小。

10.2.4. 指定您自己的缓存配置文件

要指定您自己的缓存配置文件,请输入以下命令:

bin/kc.[sh|bat] start --cache-config-file=my-cache-file.xml
Copy to Clipboard Toggle word wrap

配置文件相对于 conf/ 目录。

10.2.5. 远程服务器的 CLI 选项

为了配置红帽构建的 Keycloak 服务器配置,以实现高可用性和多节点集群设置,包括以下 CLI 选项 cache-remote-hostcache-remote-portcache-remote-usernamecache-remote-password 简化 XML 文件中的配置。存在任何声明的 CLI 参数后,XML 文件中应当没有与远程存储相关的配置。

10.2.5.1. 连接到不安全的 Infinispan 服务器

警告

不建议在生产环境中禁用安全性!

在开发或测试环境中,启动不安全的 Infinispan 服务器更容易。对于这些用例,CLI 选项 cache-remote-tls-enabled 会禁用红帽构建的 Keycloak 和 Data Grid 之间的加密(TLS)。如果 Data Grid 服务器被配置为只接受加密的连接,则 Red Hat build of Keycloak 无法启动。

CLI 选项 cache-remote-usernamecache-remote-password 是可选的,如果未设置,红帽构建的 Keycloak 将连接到 Data Grid 服务器,而无需提供任何凭证。如果 Data Grid 服务器启用了身份验证,红帽构建的 Keycloak 将无法启动。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat