Spring Boot + Spring Security Keycloak 适配器能否在令牌过期时自动刷新 HttpSession 中包含的访问令牌?

cod*_*ent 5 spring-security spring-boot openid-connect keycloak redhat-sso

我正在使用 Keycloak 通过 OIDC 为属于同一领域的一堆应用程序提供 SSO。所有这些应用程序都是使用授权代码流的机密客户端。它们使用 JSP 作为视图,所有必要的重定向都由Spring Boot 和 Spring Security Keycloak 适配器管理

成功登录后,我可以正确地从一个应用程序切换到另一个应用程序 (SSO)。对于它们中的每一个,都会生成一个包含org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken. 这个类有一个SimpleKeycloakAccount带有 securityContext ( RefreshableKeycloakSecurityContext)的 details 对象 ( ),其中包含访问令牌 ( tokenString)、id 令牌 ( idTokenString) 和刷新令牌 ( refreshTokenString):

在此处输入图片说明

包含的访问令牌有 5 分钟的到期时间。奇怪的是,在这段时间过去之后,虽然我仍然在 Spring Boot 应用程序中正确地进行了身份验证,但我已经检查过访问令牌从未刷新过

我需要一个有效的访问令牌,因为其中一些应用程序调用 REST 服务,并使用相同的适配器进行保护,并且仅使用承载身份验证。问题是我最终拥有一个过期的访问令牌并且必须(手动?)处理它的过期。

有没有办法让适配器在访问令牌过期时刷新访问令牌,或者我们希望以编程方式这样做?

你能展示一下怎么做吗?