博客 / 詳情

返回

Keycloak~infinispan中MergedUpdate中lifespanMs和maxIdleTimeMs

在 Keycloak 中,MergedUpdate 類裏的 lifespanMsmaxIdleTimeMs 是與 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 MaxSSO Session Idle 值,計算出對應的 lifespanMsmaxIdleTimeMs,並將它們作為元數據設置到 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 MaxSSO Session Idle 的全局默認值。這些配置值就是 lifespanMsmaxIdleTimeMs 的計算依據。

    • 路徑通常是:管理控制枱 -> 選擇你的 Realm -> Realm 設置 -> 令牌會話 標籤頁。
  • 查看活躍會話:Keycloak 管理後台提供了查看當前活躍會話的功能。

    • 路徑通常是:管理控制枱 -> 選擇你的 Realm -> 會話 菜單。
      在這裏你可以看到當前活躍的用户會話列表。雖然這個界面通常不會直接顯示每個會話精確到毫秒的剩餘 lifespanMsmaxIdleTimeMs,但它會展示會話的創建時間或最後活動時間。你可以結合 Realm 的全局會話超時設置,來估算會話的有效期。
  • 關鍵限制:需要明確的是,管理後台無法直接、實時地顯示每個會話在 Infinispan 緩存條目級別設置的 lifespanMsmaxIdleTimeMs 的具體數值。這些是底層緩存的內部元數據,主要用於 Infinispan 自身的過期清理機制,並不在管理界面暴露。

💎 簡單來説

lifespanMsmaxIdleTimeMs 是 Keycloak 實現會話自動過期的核心機制。它們的值由你在管理界面上設置的 SSO Session MaxSSO Session Idle 決定,並最終由 Infinispan 緩存可靠地執行。雖然無法在後台直接看到每個會話的這兩個毫秒值,但你可以通過 Realm 設置和會話列表來管理和監控會話的生命週期。

希望這個解釋能幫助你更好地理解 Keycloak 的會話過期機制。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.