keycloak~关于session idle和session max的解释

发布时间 2023-11-27 17:47:24作者: 张占岭

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上也找不到答案;这时,不防看看它的源码,从源码中找答案!