当 Keycloak 和 Spring Security 与 OIDC 客户端协议一起使用时,当 Keycloak SSO 会话超时已经发生时,应用程序会话不会过期。因此,如果用户在访问令牌过期后访问受 Keycloak 适配器保护的应用程序的任何部分,Spring Security 仍然具有身份验证对象。但是,当 Keycloak 适配器检查访问令牌是否处于活动状态时,此时它不会处于活动状态,因此适配器(RefreshableKeycloakSecurityContext.java 类)尝试使用它拥有的刷新令牌获取新的访问令牌。由于刷新令牌已在 Keycloak 中失效,因此适配器抛出
Refresh token failure status: 400 {"error":"invalid_grant","error_description":"Refresh token expired"}
因此,用户仍然可以导航和访问应用程序的任何部分,而无需进入登录页面重新进行身份验证。
任何提示/想法如何实现所需的行为,以便当 Keycloak SSO 会话过期时,用户将被重定向到登录页面并且 Spring 身份验证将失效?
Spring-Security: 4.0.4.RELEASE
Keycloak Spring Security Adapter: 3.4.2.Final
Keycloak Server: 3.4.3.Final
Run Code Online (Sandbox Code Playgroud)