Keycloak登录界面闲置过久出现authorization_request_not_found错误排查
问题原因与解决方案
错误原因分析
- OAuth2授权请求会话过期:使用Keycloak作为授权服务器时,Spring Security会将OAuth2授权请求临时存储在应用的HTTP会话中。若登录界面长时间闲置,HTTP会话会因超时被销毁,对应的授权请求也会丢失,此时点击授权链接就会触发
authorization_request_not_found错误。 - 回调地址配置错误:登录完成后跳转至
http://localhost:9090而非预期的/list,大概率是Keycloak客户端的redirect_uri配置有误,或是Spring Security中登录成功后的跳转逻辑未正确指向/list。 - 会话超时参数不合理:应用的HTTP会话超时时间设置过短,或是Keycloak端针对授权请求的缓存超时配置偏短,导致闲置一段时间后授权请求直接失效。
解决方案
- 调整会话超时设置:
- 在Spring Boot应用中,通过配置
server.servlet.session.timeout延长HTTP会话超时时间(例如设置为3600s即1小时)。 - 在Keycloak控制台对应客户端的设置页面,调整会话相关超时参数(如
Access Token Lifespan、Session Idle Timeout),确保授权请求的生命周期能覆盖用户可能的闲置时长。
- 在Spring Boot应用中,通过配置
- 修正回调地址配置:
- 在Keycloak客户端的
Valid Redirect URIs中添加正确的回调地址:http://localhost:9090/login/oauth2/code/keycloak-confidential-user(这是Spring Security OAuth2客户端默认的回调路径,需与客户端ID匹配)。 - 在Spring Security配置中,通过
defaultSuccessUrl("/list", true)指定登录成功后默认跳转至/list路径,或自定义AuthenticationSuccessHandler控制跳转逻辑。
- 在Keycloak客户端的
- 处理授权请求过期场景:
- 在Spring Security中添加错误处理器,捕获
authorization_request_not_found错误,引导用户重新发起登录请求,避免手动输入地址的繁琐操作。
- 在Spring Security中添加错误处理器,捕获
- 检查会话存储可靠性:若应用部署在多实例或有反向代理的环境中,需确保会话通过Redis等共享存储方式同步,防止因会话丢失导致授权请求找不到的问题。
内容的提问来源于stack exchange,提问作者Celpin
相关产品推荐
相关产品推荐

