










在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)的有效性。它会查询 sessions、offlineSessions 等缓存来验证令牌是否有效、是否过期。/auth/realms/{realm}/protocol/{protocol}/token (Token endpoint):此端点用于获取或刷新令牌。登录时,会创建并缓存新的会话(authenticationSessions、sessions、clientSessions);刷新令牌时,会更新缓存中的会话状态。/auth/realms/{realm}/broker/{provider_id}/endpoint (Broker endpoint):此端点处理与外部身份提供者(如Google、GitHub)的联合认证。在认证过程中,会创建临时的 authenticationSessions,并在成功后建立主会话(sessions)。/auth/realms/{realm}/protocol/{protocol}/auth (Authorization endpoint):此端点是OIDC授权流程的起点,用于发起用户认证。它会创建并管理 authenticationSessions,直到整个流程结束。简单来说,authenticationSessions 处理认证中的临时状态,而 sessions 和 clientSessions 则负责维护认证成功后的长期会话。
Keycloak 也提供了一些管理端点来直接操作缓存(需要管理员权限):
POST 请求 /admin/realms/{realm}/clear-{cache-name}-cache 来清空,例如 clear-realm-cache 或 clear-user-cache。GET 请求 /admin/realms/{realm}/cache/sessions/contains/{session-id} 来检查特定会话是否在缓存中。POST 请求 /admin/realms/{realm}/cache/sessions/clear 可以清空指定领域的会话缓存。所有这些缓存的行为,都在 Keycloak 的配置文件 conf/cache-ispn.xml 中定义。你可以通过修改此文件来调整缓存大小、过期时间等策略。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。