You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pac4j+Shiro+Keycloak遇token失效,求会话超时配置位置

问题分析与解决方案

一、报错原因解析

你遇到的TechnicalException: Bad token response, error=invalid_grant, description=Token is not active错误,本质是会话过期后,Pac4j尝试使用已失效的刷新令牌向Keycloak请求新的访问令牌失败。触发场景是本地应用会话过期后,系统自动尝试续期身份凭证,但Keycloak端对应的刷新令牌已经过期或失效。

二、会话过期配置的区别

Shiro的sessionManager.globalSessionTimeout

这个配置控制的是你的Web应用本地会话的有效期(比如你设置的8小时),也就是用户在你的应用中保持登录状态的时长,到期后Shiro会销毁本地的会话数据。

Keycloak的令牌过期配置

Keycloak负责管理身份凭证(访问令牌、刷新令牌)的生命周期,相关配置在Keycloak后台的Realm设置中:

  • 进入目标Realm → 点击"Tokens"标签页
  • 可配置Access Token Lifespan(访问令牌有效期)、Refresh Token Lifespan(刷新令牌有效期)等参数
    这些配置决定了Keycloak颁发的令牌能持续多久,一旦刷新令牌过期,Pac4j就无法通过它续期访问令牌,会抛出你遇到的错误。

三、解决建议

  1. 对齐会话与令牌有效期:确保Keycloak的刷新令牌有效期 ≥ Shiro本地会话有效期,避免本地会话还没过期,刷新令牌已经失效的情况;如果希望本地会话过期后强制重新登录,可设置Shiro会话有效期更短,且关闭自动续期逻辑。
  2. 处理续期失败场景:在Pac4j/Shiro的认证流程中添加异常处理,当捕获到invalid_grant错误时,直接引导用户跳转到Keycloak登录页面重新认证,而不是让报错暴露出来。
  3. 清理无效会话数据:确保Shiro会话销毁时,同步清理Pac4j存储的刷新令牌等身份凭证,避免后续用无效令牌发起请求。

内容的提问来源于stack exchange,提问作者vished2000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 16:54:58