中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

keycloak~token有效期與(yu)session有效期的調(diao)研

一 refresh_token刷新access_token

Keycloak會話(hua)管(guan)理中,獲取到accessToken和(he)refreshToken后,基于(yu)accessToken交換用戶數據或者參與KeycloakAPI的請求,當accessToken過(guo)期的時候,可使(shi)用refreshToken去交換新(xin)的accessToken和(he)refreshToken。

這塊(kuai)根據之前的refresh_token就得到了一個新的token對(dui)象

refresh_token和access_token有效期配置

  • refresh_token的有效期一般比access_token的長,這也就是通過refresh_token來換取新的access_token的一個前提,下面來配置一個這兩個token的超時時間。
  • refresh_token超時時間refresh_expires_in,在realms settings中,選擇tokens進行配置,對SSO Session Max進行設置

access_token超時(shi)(shi)時(shi)(shi)間expires_in,在realms settings中,選擇tokens進行配置,對Access Token Lifespan進行設置。

這個用戶會話,對應的sessionId(session_state)可以在瀏覽器cookie中找到,或者在kc管理后臺的用戶-》會話中查看,這個sessionId被客戶端訪問,都會刷新這個“開始”時間,和“最后訪問”時間,當你的access_token過期后,你通過refresh_token去刷新access_token時,這個“最后訪問”時間也會更新,如圖

如果用戶訪問資源(yuan),在token過期,而refresh_token(sso session max)未(wei)過期時(shi),你(ni)可以通過refresh_token來獲取新(xin)的(de)token,這(zhe)時(shi)會(hui)有新(xin)的(de)會(hui)話產生(sheng);但如果refresh_token也(ye)(ye)過期時(shi),它將(jiang)跳轉到登錄頁,從新(xin)進(jin)行(xing)認證(zheng),會(hui)話也(ye)(ye)就被刪除了。

三 refresh_token過期時間的配置

領(ling)域設置->Tokens中,有四(si)個選項用來控(kong)制refresh_token的超時時間

  • SSO Session Idle
  • SSO Session Max
  • Client Session Idle
  • Client Session Max

下(xia)圖的4個選項(xiang),配置(zhi)是有問題(ti)的,正確的配置(zhi)應該是最(zui)長時間大于空(kong)閑時間,下(xia)面配置(zhi)無意義,這(zhe)時有效性使用4個選項(xiang)中最(zui)小的值【sso會話空(kong)閑時間,sso會話最(zui)長時間,client session Idle和client session Max】

如果正常配置的話,當空閑時間和最長時間不相同時,真實的refresh_token_expire時間將取決于client Session Idle的值,如下配置

當refresh_token到期之后到達 ( session max的時間 ) ,session就失效了,而它并不會立即清除,它會交給keycloak進行維護,最長是session max時間后自動清除,而用(yong)戶如(ru)果(guo)在這個時(shi)間之前進行refresh_token時(shi),會(hui)提示(shi)token是不活動的(de),這時(shi)會(hui)話也會(hui)也被清空,表示(shi)令(ling)牌(pai)過期了,如(ru)下面(mian)兩張圖:

當session idle和session max不相同時(sso session max和client session max),用戶的會話會在sso session max到期時刪除,而sso session max是全局的,不能在客戶(hu)端單獨配置(zhi)(zhi),一個會話(hua)是在什么時間(jian)被系(xi)統回收(shou),主要(yao)由以下(xia)6個參數決定,SSO Session Max和(he)Client Sesssion Max我(wo)們(men)設(she)置(zhi)(zhi)一個即可(ke),它在keycloak后臺(tai)清理session時會以最長的為準,而當session達到session idle時間(jian)時,如果用戶(hu)主動刷(shua)新token,session也會被主動刪除,不會等session max時間(jian)達了再刪。

四 Session Idle和Session Max的作用

會(hui)話的(de)空(kong)閑時間(Idle),是指在多(duo)長時間之內(nei)沒有使(shi)用(yong)refresh_token進行(xing)刷新(xin)(xin),這(zhe)(zhe)個會(hui)話(session_state)就(jiu)(jiu)過期(qi),無(wu)法(fa)再直接用(yong)refresh_token去換新(xin)(xin)的(de)token了,這(zhe)(zhe)時用(yong)戶就(jiu)(jiu)需要(yao)重新(xin)(xin)回到(dao)登錄頁(ye),完(wan)成新(xin)(xin)的(de)認(ren)證(zheng);這(zhe)(zhe)主要(yao)針(zhen)對長時間不操作的(de)用(yong)戶,kc需要(yao)讓(rang)它重新(xin)(xin)完(wan)成用(yong)戶名密碼的(de)確認(ren)。

注意:如果開啟了“記住我”這個功能,因為如果開啟“記住我”功能之后,你的會話空閑時間等于“記住我空閑時間”,你的(de)”sso session idle”配置將(jiang)(jiang)失效,如果(guo)記住我配置了(le)最大時(shi)間(jian)和空閑時(shi)間(jian),那么token的(de)生成和校驗都將(jiang)(jiang)使(shi)用記住我的(de)時(shi)間(jian),如圖keycloak14.0.0.-services里(li)AuthenticationManage.isSessionValid的(de)源(yuan)碼(ma)。

session idle在判斷上有2分鐘的誤差,主要考慮DC集群的數據(ju)同步,比(bi)如idle有效期(qi)5分(fen)(fen)鐘,那么真正過期(qi)就是5+2為7分(fen)(fen)鐘】當到7分(fen)(fen)鐘后,你(ni)獲(huo)取session是否在線時,結(jie)果會返回false.

上面代碼中,isSessionValid方法會在驗證token和刷新token時都會進行執行,我們如果希望將session idle和session max去正確使用,還需要修改kc源代碼中的org.keycloak.protocol.oidc
.TokenManager.refreshAccessToken()方(fang)法(fa)中(zhong)的(de)代碼,將verifyRefreshToken方(fang)法(fa)參數(shu)中(zhong)的(de)checkExpiration改成false,如圖(tu):

最后,下(xia)圖配置(zhi)了access_token有(you)效期(qi)(qi)(qi)(qi)2分鐘,refresh_token最長30天(tian),會(hui)話(hua)空閑為(wei)7天(tian);配置(zhi)的作用(yong)(yong)為(wei):用(yong)(yong)戶每2分鐘access_token會(hui)過(guo)期(qi)(qi)(qi)(qi),然后用(yong)(yong)戶通(tong)過(guo)refresh_token去換新的access_token,如(ru)果(guo)用(yong)(yong)戶7天(tian)沒有(you)換token,這個會(hui)話(hua)就過(guo)期(qi)(qi)(qi)(qi),如(ru)果(guo)會(hui)話(hua)已(yi)經產(chan)生了30天(tian),則會(hui)話(hua)也過(guo)期(qi)(qi)(qi)(qi),用(yong)(yong)戶就會(hui)返(fan)回登錄頁,重新認證。

事實上,當session idle 和session max相等時,你(ni)(ni)(ni)的(de)(de)(de)(de)(de)refresh_token的(de)(de)(de)(de)(de)過(guo)期(qi)時間(jian)會一直(zhi)遞減,從第一次申請(qing)(qing)這個refresh_token開始(shi),這個過(guo)期(qi)時間(jian)就固定了,它和你(ni)(ni)(ni)換新token是(shi)無關系的(de)(de)(de)(de)(de);但(dan)如(ru)果session idle和 session max不相等時(max>idle),你(ni)(ni)(ni)每換新token,你(ni)(ni)(ni)的(de)(de)(de)(de)(de)新換的(de)(de)(de)(de)(de)refresh_token的(de)(de)(de)(de)(de)過(guo)期(qi)時間(jian)都從頭開始(shi)算,它的(de)(de)(de)(de)(de)大小(xiao)等于session idle的(de)(de)(de)(de)(de)大小(xiao),這也(ye)是(shi)你(ni)(ni)(ni)在session idle時間(jian)內沒有去刷新token而會話就會過(guo)期(qi)的(de)(de)(de)(de)(de)原因(yin),請(qing)(qing)注意:我(wo)們要用新換回(hui)的(de)(de)(de)(de)(de)refresh_token把之(zhi)前的(de)(de)(de)(de)(de)refresh_token也(ye)替換掉,因(yin)為老的(de)(de)(de)(de)(de)已經過(guo)期(qi)了。

五 offline_access角色讓refresh_token永不過期

對于用戶(hu)登錄(lu)后,如果(guo)授權碼(ma)(ma)模式,如果(guo)希望refresh_token永不過期,可以使用offline_access這種(zhong)scope ,前(qian)提是(shi)(shi)你在認(ren)證接口調(diao)用時(shi),scope地方(fang)需(xu)要添加offline_access這個(ge)選項,并且(qie)你是(shi)(shi)授權碼(ma)(ma)的認(ren)證方(fang)式,如圖:

當前客(ke)戶端(duan)(duan)模板里,也(ye)是需要添加這個offline_access的(de)客(ke)戶端(duan)(duan)模板

為指定(ding)的用戶添(tian)(tian)加offline_access角色,如果沒有這個角色,需要手動添(tian)(tian)加。

當沒有開啟(qi)Offline session Max limit時,你的刷新token就是永不過期的,如圖

如(ru)果希望控(kong)制(zhi)refresh_token的有效期,可以開(kai)啟限(xian)制(zhi)

生成的refresh_token的超時時間(jian)將(jiang)是5分鐘(zhong),300秒,還是上面4個配置,誰(shui)小用誰(shui),如圖(tu):

Refresh_token的(de)JWT串(chuan),解析后Typ有兩種類型,Refresh和Offline,前者(zhe)的(de)是(shi)通過(guo)SSO Session Max來(lai)控制它(ta)的(de)有效(xiao)期,而后者(zhe)Offline就是(shi)申請(qing)token時,使用的(de)scope包含了(le)offline_access,它(ta)對應的(de)refresh_token是(shi)無不效(xiao)期的(de)。

posted @ 2024-10-16 17:30  張占嶺  閱讀(885)  評論(2)    收藏  舉報