keyclaok~keycloak存到cookie中(zhong)的值和session_state
keycloak存到cookie中的值
- AUTH_SESSION_ID
- KEYCLOAK_IDENTITY
- KEYCLOAK_SESSION
AUTH_SESSION_ID
用戶的(de)當前session_state,它是(shi)會話級的(de),關閉瀏覽器就沒了
KEYCLOAK_IDENTITY
它是用戶跨端登錄的基礎,它也是一個jwt串,解析后是這樣的結果,用戶在當前端沒有登錄時,會跳到kc認證頁,當發現cookie里的kc域下有這個KEYCLOAK_IDENTITY,會使用這個session_state進行認證,沒(mei)有(you)這個鍵(jian),KC認證不(bu)能完成。
{
"exp": 1682659005,
"iat": 1680067005,
"jti": "d655a51e-f363-43cf-9f3e-1be8c4f7f082",
"iss": "//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"
}
注意:如果瀏(liu)覽(lan)器的cookie里(li)的KEYCLOAK_IDENTITY丟失了,會導致KC出現無法登錄的問題,解(jie)決方法只能(neng)是(shi)清(qing)除瀏(liu)覽(lan)器里(li)的AUTH_SESSION_ID和KEYCLOAK_SESSION,注意還有后綴為LEGACY的鍵值.
KEYCLOAK_SESSION
當你可算讓KC記住你的登錄狀態,這時KC會在cookie中生成KEYCLOAK_SESSION,它的值默認與AUTH_SESSION_ID相同,當是一個包含過期時間的cookie,瀏覽器關閉后它依然保持,直到你在KC記住我中配置的過期時間。
假設(she)還有第(di)2個(ge)、第(di)3個(ge)應(ying)用(yong),在keycloak的(de)(de)相同的(de)(de)realm中(zhong)注冊了各自的(de)(de)client,我(wo)(wo)們在訪(fang)問第(di)2個(ge)、第(di)3個(ge)應(ying)用(yong)的(de)(de)時候,也會(hui)跳轉(zhuan)到(dao)keycloak登(deng)(deng)錄(lu)頁(ye)面(mian)(帶上各自的(de)(de)client_id, redirect_url),但是就像上面(mian)的(de)(de)現象(xiang)一樣,我(wo)(wo)們的(de)(de)keycloak登(deng)(deng)錄(lu)頁(ye)對應(ying)的(de)(de)domain/path中(zhong)有那3個(ge)cookie值AUTH_SESSION_ID,KEYCLOAK_IDENTITY和KEYCLOAK_SESSION, 這樣就會(hui)自動跳轉(zhuan)到(dao)我(wo)(wo)們應(ying)用(yong)的(de)(de)界(jie)面(mian),無需填寫keycloak登(deng)(deng)錄(lu)的(de)(de)賬號(hao)密碼,并且能夠返回授(shou)權碼code,這就算(suan)登(deng)(deng)錄(lu)成(cheng)功了,登(deng)(deng)錄(lu)成(cheng)功之后(hou),后(hou)續的(de)(de)操作(zuo)就是我(wo)(wo)們再利用(yong)這個(ge)授(shou)權碼code和client_secret訪(fang)問keycloak去獲取access token,這就是Oauth2.0的(de)(de)授(shou)權碼模(mo)式。
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四個配(pei)置,誰小(xiao)使用誰。
- 當session_state達到這個refresh_token的超時時間+access_token超時時間后,它會被刪除
- 當用戶進行登出操作后,它會被刪除
- 如下配置,用戶在3+2分鐘后PM 02:22:17時,它的 會話將被刪除(回收)


在02:22:17 PM時,這個會話將被回收,同時這個用戶在前端也會從新去登錄頁認證



