keycloak~缓存对象的介绍与作用

在Keycloak中,所有涉及会话、令牌、登录状态或频繁访问数据的REST API端点,在后台都依赖于Infinispan缓存。你提到的这四个端点,正是其中的典型代表。

Keycloak使用了一系列预定义的缓存来存储不同类型的数据。下表列出了主要的缓存及其用途,能帮你更好地理解哪些端点会用到缓存:

缓存名称 (Cache Name) 缓存类型 (Cache Type) 主要用途 (Description)
authenticationSessions 分布式 (Distributed) 缓存认证过程中的临时会话,直到认证完成或过期。
sessions 分布式 (Distributed) 缓存用户的活跃(在线)会话。
clientSessions 分布式 (Distributed) 缓存用户针对特定客户端应用的会话数据。
offlineSessions 分布式 (Distributed) 缓存用户的离线会话(允许离线访问的令牌)。
offlineClientSessions 分布式 (Distributed) 缓存用户针对特定客户端的离线会话数据。
loginFailures 分布式 (Distributed) 跟踪失败的登录尝试,用于防爆破等欺诈检测。
actionTokens 分布式 (Distributed) 缓存各类操作令牌,如邮箱验证、密码重置等。
realms, users, authorization 本地 (Local) 缓存领域、用户、权限等持久化数据,以减少数据库查询。
keys 本地 (Local) 缓存外部公钥,用于验证签名。
work 复制 (Replicated) 在多节点集群中,用于广播缓存失效消息,确保数据一致性。

💡 你提到的四个端点与缓存的关系

  • /auth/realms/{realm}/protocol/{protocol}/token/introspect (Token introspection):此端点用于检查令牌(access_token或refresh_token)的有效性。它会查询 sessionsofflineSessions 等缓存来验证令牌是否有效、是否过期。
  • /auth/realms/{realm}/protocol/{protocol}/token (Token endpoint):此端点用于获取或刷新令牌。登录时,会创建并缓存新的会话(authenticationSessionssessionsclientSessions);刷新令牌时,会更新缓存中的会话状态。
  • /auth/realms/{realm}/broker/{provider_id}/endpoint (Broker endpoint):此端点处理与外部身份提供者(如Google、GitHub)的联合认证。在认证过程中,会创建临时的 authenticationSessions,并在成功后建立主会话(sessions)。
  • /auth/realms/{realm}/protocol/{protocol}/auth (Authorization endpoint):此端点是OIDC授权流程的起点,用于发起用户认证。它会创建并管理 authenticationSessions,直到整个流程结束。

简单来说,authenticationSessions 处理认证中的临时状态,而 sessionsclientSessions 则负责维护认证成功后的长期会话。

🔧 如何管理缓存

Keycloak 也提供了一些管理端点来直接操作缓存(需要管理员权限):

  • 清空特定缓存:可以通过 POST 请求 /admin/realms/{realm}/clear-{cache-name}-cache 来清空,例如 clear-realm-cacheclear-user-cache
  • 检查缓存内容:可以使用 GET 请求 /admin/realms/{realm}/cache/sessions/contains/{session-id} 来检查特定会话是否在缓存中。
  • 清空会话缓存:通过 POST 请求 /admin/realms/{realm}/cache/sessions/clear 可以清空指定领域的会话缓存。

⚙️ 缓存配置文件

所有这些缓存的行为,都在 Keycloak 的配置文件 conf/cache-ispn.xml 中定义。你可以通过修改此文件来调整缓存大小、过期时间等策略。

posted @ 2026-09-03 09:15  张占岭  阅读(9)  评论(0)    收藏  举报