Keycloak:请求新access_token后延长refresh_token有效期
Keycloak刷新令牌时延长有效期的解决方案
问题背景
当access_token过期后,通过请求grant_type='refresh_token'&refresh_token=refreshToken获取新令牌时,新refresh_token的过期时间与旧令牌完全一致,导致用户需要频繁重新输入凭证登录。不想使用offline_access scope(会生成永久有效令牌),仅希望用户长时间未操作时才触发重新登录。
解决方案
1. 配置客户端的会话超时参数
在Keycloak控制台中找到目标客户端,进入「Settings」标签页,调整以下核心参数:
- SSO Session Idle:设置会话的闲置超时时间(比如2小时)。用户每次用refresh_token刷新令牌时,会话的闲置计时器会重置,只要在该时间内有操作,就不会触发重新登录。
- SSO Session Max:设置会话的绝对最长时长(比如24小时)。即使用户频繁操作,到达该时间后仍需重新登录,避免会话永久有效。
- Access Token Lifespan:按需设置access_token的有效期(比如15分钟),这个参数不影响refresh_token的有效期逻辑。
2. 使用在线会话模式(避免offline_access)
保持请求的scope为默认值(不包含offline_access),此时生成的是在线会话的refresh_token。每次刷新时,Keycloak会基于当前会话的闲置状态重新计算refresh_token的过期时间——只要会话未因闲置或超时而失效,新refresh_token的有效期就会从刷新时刻开始,延续SSO Session Idle设置的时长。
3. 验证配置效果
- 刷新令牌后,查看返回的新refresh_token的
exp字段,确认其过期时间为当前时间加上SSO Session Idle的时长。 - 闲置测试:等待超过SSO Session Idle的时间后尝试刷新,此时Keycloak会返回错误,要求重新登录;若在闲置时间内刷新,令牌有效期会成功延长。
内容的提问来源于stack exchange,提问作者Bishop19
相关产品推荐
相关产品推荐

