keycloak~關於session idle和session max的解釋

張佔嶺發表於2023-11-27

keycloak可以幫助我們實現這個功能:使用者token每5分鐘失效一次,失效後透過refresh_token來換新的token,而refresh_token每30天失效一次,但如果使用者3天都沒有任何操作(就是沒有用refresh_token去換新的token),那麼3天后也讓refresh_token失效,使用者需要從新去登入。

先說refresh_token過期時間的配置

領域設定->Tokens中,有四個選項用來控制refresh_token的超時時間

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

上面4個選項,Max Session和Client Session哪個大,refresh_token的過期時間就用哪個,如下配置中,它的過期時間就是30天;

當refresh_token到期之後 ,session就失效了,而它並不會立即清楚,它會交給keycloak進行維護,而使用者再進行重新整理token時,會提示token是不活動的,在keycloak後臺會話的客戶端也被清空,表示令牌過期了,如下面兩張圖:

再說Session Idle和Session Max的作用

會話的空閒時間(Idle),是指在多長時間之內沒有使用refresh_token進行重新整理,這個會話(session_state)就過期,無法再直接用refresh_token去換新的token了,這時使用者就需要重新回到登入頁,完成新的認證;這主要針對長時間不操作的使用者,kc需要讓它重新完成使用者名稱密碼的確認。

注意:如何關注一下“記住我”這個功能,因為如果開啟“記住我”功能之後,你的會話空閒時間等於“記住我空閒時間”,你的”sso session idle”配置將失效,如果記住我配置了最大時間和空閒時間,那麼token的生成和校驗都將使用記住我的時間,如圖keycloak14.0.0.-services裡AuthenticationManage.isSessionValid的原始碼。

如下圖配置了access_token有效期2分鐘,refresh_token最長30天,會話空閒為7天;配置的作用為:使用者每2分鐘access_token會過期,然後使用者透過refresh_token去換新的access_token,如果使用者7天沒有換token,這個會話就過期,如果會話已經產生了30天,則會話也過期,使用者就會返回登入頁,重新認證。

有時,我們在google上找不到答案;有時,我們在chatgpt上也找不到答案;這時,不防看看它的原始碼,從原始碼中找答案!

相關文章