keycloak可以幫助我們實現(xiàn)這個功能:用戶token每5分鐘失效一次,失效后通過refresh_token來換新的token,而refresh_token每30天失效一次,但如果用戶3天都沒有任何操作(就是沒有用refresh_token去換新的token),那么3天后也讓refresh_token失效,用戶需要從新去登錄。
先說refresh_token過期時間的配置
領(lǐng)域設(shè)置->Tokens中,有四個選項用來控制refresh_token的超時時間
- SSO Session Idle
- SSO Session Max
- Client Session Idle
- Client Session Max
上面4個選項,Max Session和Client Session哪個大,refresh_token的過期時間就用哪個,如下配置中,它的過期時間就是30天;
當(dāng)refresh_token到期之后 ,session就失效了,而它并不會立即清楚,它會交給keycloak進行維護,而用戶再進行刷新token時,會提示token是不活動的,在keycloak后臺會話的客戶端也被清空,表示令牌過期了,如下面兩張圖:
再說Session Idle和Session Max的作用
會話的空閑時間(Idle),是指在多長時間之內(nèi)沒有使用refresh_token進行刷新,這個會話(session_state)就過期,無法再直接用refresh_token去換新的token了,這時用戶就需要重新回到登錄頁,完成新的認證;這主要針對長時間不操作的用戶,kc需要讓它重新完成用戶名密碼的確認。
注意:如何關(guān)注一下“記住我”這個功能,因為如果開啟“記住我”功能之后,你的會話空閑時間等于“記住我空閑時間”,你的”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,這個會話就過期,如果會話已經(jīng)產(chǎn)生了30天,則會話也過期,用戶就會返回登錄頁,重新認證。
后臺配置如下:
最后,還需要修改源碼:org.keycloak.protocol.oidc.TokenManager.refreshAccessToken()方法中的代碼,將verifyRefreshToken方法參數(shù)中的checkExpiration改成false,來滿足我們的要求,否則,你的session idle不起作用,因為refresh_token的超時時間用的是它,而開啟這個checkExpiration之后,當(dāng)session idle到期后,上面的isSessionValid
都走不到,所以我們可以把它改成false,讓會話過期的判斷留給isSessionValid方法來做。
文章來源:http://www.zghlxwxcb.cn/news/detail-747513.html
有時,我們在google上找不到答案;有時,我們在chatgpt上也找不到答案;這時,不防看看它的源碼,從源碼中找答案!文章來源地址http://www.zghlxwxcb.cn/news/detail-747513.html
到了這里,關(guān)于keycloak~關(guān)于session idle和session max的解釋的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!