Keycloak刷新令牌问题:新令牌与旧令牌过期时间相同如何解决
解决Keycloak刷新令牌过期时间不更新的问题
你遇到的问题是Keycloak客户端的刷新令牌策略配置导致的,按以下步骤调整即可解决:
- 进入Keycloak管理控制台,找到对应的客户端,切换到「Settings」标签页
- 找到Refresh Token Policy配置项:
- 若当前设置为「Absolute」,刷新令牌的过期时间会沿用初始令牌的过期时间,不会更新
- 将其修改为「Relative」,这样每次调用
refresh_token接口时,新刷新令牌的过期时间会从当前请求时间重新计算
- 同时确认客户端的Refresh Token Lifespan(刷新令牌有效期)设置了合理值,比如7天或根据业务需求调整
如果使用的是离线刷新令牌(获取时带scope=offline_access),还需要检查客户端的离线会话配置:
- 调整Offline Session Idle Timeout(离线会话空闲超时)和Offline Session Max Lifespan(离线会话最大生命周期),确保策略为相对时间更新
调用refresh_token接口的示例请求:
curl -X POST 'http://你的Keycloak域名/realms/你的领域/protocol/openid-connect/token' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'grant_type=refresh_token' \ -d 'refresh_token=原刷新令牌' \ -d 'client_id=你的客户端ID' \ -d 'client_secret=你的客户端密钥' # 仅当客户端为Confidential类型时需要
调整配置后,再次调用接口获取的新刷新令牌,其过期时间就会从当前时间开始更新。
内容的提问来源于stack exchange,提问作者Haseeb
相关产品推荐
相关产品推荐

