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)的有效性。它会查询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 中定义。你可以通过修改此文件来调整缓存大小、过期时间等策略。
浙公网安备 33010602011771号