keyclaok~keycloak存到cookie中的值和session_state

keycloak存到cookie中的值

  • AUTH_SESSION_ID
  • KEYCLOAK_IDENTITY
  • KEYCLOAK_SESSION

AUTH_SESSION_ID

用戶的當前session_state,它是會話級的,關閉瀏覽器就沒了

KEYCLOAK_IDENTITY

它是用戶跨端登錄的基礎,它也是一個jwt串,解析後是這樣的結果,用戶在當前端沒有登錄時,會跳到kc認證頁,當發現cookie裏的kc域下有這個KEYCLOAK_IDENTITY,會使用這個session_state進行認證,沒有這個鍵,KC認證不能完成。

{
    "exp": 1682659005,
    "iat": 1680067005,
    "jti": "d655a51e-f363-43cf-9f3e-1be8c4f7f082",
    "iss": "https://finalcas.pkulaw.com/auth/realms/fabao",
    "sub": "347c9e9e-076c-45e3-be74-c482fffcc6e5",
    "typ": "Serialized-ID",
    "session_state": "4b020044-d273-41c6-9cea-c9ea1b0814f7",
    "state_checker": "SGniuhvr-FbQ7aznFTiTDIi2Gt4CKev7DI3vLNvJufo"
}

注意:如果瀏覽器的cookie裏的KEYCLOAK_IDENTITY丟失了,會導致KC出現無法登錄的問題,解決方法只能是清除瀏覽器裏的AUTH_SESSION_ID和KEYCLOAK_SESSION,注意還有後綴爲LEGACY的鍵值.

KEYCLOAK_SESSION

當你可算讓KC記住你的登錄狀態,這時KC會在cookie中生成KEYCLOAK_SESSION,它的值默認與AUTH_SESSION_ID相同,當是一個包含過期時間的cookie,瀏覽器關閉後它依然保持,直到你在KC記住我中配置的過期時間。

假設還有第2個、第3個應用,在keycloak的相同的realm中註冊了各自的client,我們在訪問第2個、第3個應用的時候,也會跳轉到keycloak登錄頁面(帶上各自的client_id, redirect_url),但是就像上面的現象一樣,我們的keycloak登錄頁對應的domain/path中有那3個cookie值AUTH_SESSION_ID,KEYCLOAK_IDENTITY和KEYCLOAK_SESSION, 這樣就會自動跳轉到我們應用的界面,無需填寫keycloak登錄的賬號密碼,並且能夠返回授權碼code,這就算登錄成功了,登錄成功之後,後續的操作就是我們再利用這個授權碼code和client_secret訪問keycloak去獲取access token,這就是Oauth2.0的授權碼模式。

sesssion_state

以上三個被存儲在客戶端瀏覽器裏的鍵值( AUTH_SESSION_ID, KEYCLOAK_IDENTITY,KEYCLOAK_SESSION)都有對session_state的存儲,只不過,我們存儲的有效期不同,AUTH_SESSION_ID是會話級,後兩個是與KC後臺配置的記住我中的refresh_token有效期相同的,即SSO Session Idle, SSO Session Max,Client Session Idle,Client Session Max四個配置,誰小使用誰。

  • 當session_state達到這個refresh_token的超時時間+access_token超時時間後,它會被刪除
  • 當用戶進行登出操作後,它會被刪除
  • 如下配置,用戶在3+2分鐘後PM 02:22:17時,它的 會話將被刪除(回收)


    在02:22:17 PM時,這個會話將被回收,同時這個用戶在前端也會從新去登錄頁認證
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章