繁体   English   中英

使用 Spring Security Adapter 时的 Keycloak 会话超时行为

[英]Keycloak Session Timeout behavior when using Spring Security Adapter

当 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

Keycloak 文档的 xml 配置部分似乎缺少某些内容。 有一个过滤器可用于检查令牌并在无法刷新时将用户注销,KeycloakSecurityContextRequestFilter。

因此,如果您使用基于文档的 XML 配置,则必须添加以下 bean:

<bean id="keycloakSecurityContextRequestFilter"
          class="org.keycloak.adapters.springsecurity.filter.KeycloakSecurityContextRequestFilter" />

然后将其添加到 security:http 配置中:

<security:custom-filter ref="keycloakSecurityContextRequestFilter" after="FORM_LOGIN_FILTER" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM