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時,這個會話將被回收,同時這個用戶在前端也會從新去登錄頁認證

作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980
支付寶掃一掃,為大叔打賞!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/548695.html
標籤:Java
