在 Keycloak 中,MergedUpdate 類裏的 lifespanMs 和 maxIdleTimeMs 是與 Infinispan 分佈式緩存會話管理密切相關的兩個核心參數。它們共同決定了用户會話在緩存中的存活時間。
下面的表格能幫你快速把握它們的核心區別:
| 參數 | 含義 | 對應 Keycloak 配置舉例 | 過期觸發條件 |
|---|---|---|---|
lifespanMs |
會話的絕對最大存活時間 | SSO Session Max |
從會話創建開始計時,無論是否活躍,到期即過期。 |
maxIdleTimeMs |
會話的最大空閒時間 | SSO Session Idle |
從最後一次訪問會話開始計時,如果持續空閒超過設定時間則過期。 |
💡 參數詳解與應用
-
lifespanMs(生存時間):這個參數為會話設置了一個“最終期限”。例如,如果SSO Session Max設置為 8 小時,那麼即使用户一直在活動,8小時後該會話也會強制失效,用户需要重新登錄。這為會話提供了一個硬性的安全上限。 -
maxIdleTimeMs(最大空閒時間):這個參數關注的是會話的活躍度。例如,如果SSO Session Idle設置為 30 分鐘,那麼用户如果在 30 分鐘內沒有任何操作(如訪問受保護的頁面),會話就會因空閒而過期。這有助於及時釋放不活躍會話佔用的資源。
Keycloak 在創建或更新一個用户會話對象(如 UserSessionEntity)時,會根據你在 Realm 設置中配置的 SSO Session Max 和 SSO Session Idle 值,計算出對應的 lifespanMs 和 maxIdleTimeMs,並將它們作為元數據設置到 Infinispan 緩存條目中。此後,Infinispan 會負責在後台自動清理過期的會話條目。
下面日誌是用户登錄後,寫入sessions和clientSessions緩存的信息,包含它們的過期時間
-
sessions
- Lifespan: max(sso session max & SSO Session Max Remember Me)這3個時間的最大值
- MaxIdle: sso session idle (最小時間為300秒,5分鐘,所以緩存中最小為5+3=8分鐘)
-
clientSessions
- Lifespan: client session max (最小時間為300秒,5分鐘,所以緩存中最小為5+3=8分鐘)
- MaxIdle: client session idle
-
當用户會話緩存sessions,它的Lifespan大於客户端clientSessions的Lifespan時,可能出現的情況就是,用户會話列表中顯示的
客户端為空
15:50:34,725 INFO [org.keycloak.models.sessions.infinispan.changes.InfinispanChangelogBasedTransaction]
(default task-8) Add_if_absent successfully called for entity '8832559e-f1f8-4b22-9878-9dd47a01951c' to
the cache 'sessions' . Lifespan: 600000 ms, MaxIdle: 480000 ms
15:50:34,728 INFO [org.keycloak.models.sessions.infinispan.changes.InfinispanChangelogBasedTransaction]
(default task-8) Add_if_absent successfully called for entity '0c836594-c06d-4968-b5ca-ab6be6e91d4f' to
the cache 'clientSessions' . Lifespan: 1800000 ms, MaxIdle: 780000 ms
🔍 後台查看與管理
關於你提到的能否在 Keycloak 管理後台查看具體時間:
-
查看配置:你可以在 Keycloak 管理控制枱的 Realm 設置中直接找到並修改
SSO Session Max和SSO Session Idle的全局默認值。這些配置值就是lifespanMs和maxIdleTimeMs的計算依據。- 路徑通常是:管理控制枱 -> 選擇你的 Realm -> Realm 設置 -> 令牌 或 會話 標籤頁。
-
查看活躍會話:Keycloak 管理後台提供了查看當前活躍會話的功能。
- 路徑通常是:管理控制枱 -> 選擇你的 Realm -> 會話 菜單。
在這裏你可以看到當前活躍的用户會話列表。雖然這個界面通常不會直接顯示每個會話精確到毫秒的剩餘lifespanMs和maxIdleTimeMs,但它會展示會話的創建時間或最後活動時間。你可以結合 Realm 的全局會話超時設置,來估算會話的有效期。
- 路徑通常是:管理控制枱 -> 選擇你的 Realm -> 會話 菜單。
-
關鍵限制:需要明確的是,管理後台無法直接、實時地顯示每個會話在 Infinispan 緩存條目級別設置的
lifespanMs和maxIdleTimeMs的具體數值。這些是底層緩存的內部元數據,主要用於 Infinispan 自身的過期清理機制,並不在管理界面暴露。
💎 簡單來説
lifespanMs 和 maxIdleTimeMs 是 Keycloak 實現會話自動過期的核心機制。它們的值由你在管理界面上設置的 SSO Session Max 和 SSO Session Idle 決定,並最終由 Infinispan 緩存可靠地執行。雖然無法在後台直接看到每個會話的這兩個毫秒值,但你可以通過 Realm 設置和會話列表來管理和監控會話的生命週期。
希望這個解釋能幫助你更好地理解 Keycloak 的會話過期機制。