keycloak openid 使用 spring boot 单点注销

dgr*_*018 3 spring-security logout spring-boot openid-connect keycloak

我正在尝试使用 keycloak 和 openid 在我的 spring 启动应用程序中实现单次注销。

我已经使用 sprint boot 1.5.3 和 spring 安全适配器(此处的文档)设置了 keycloak 3.4.3 ,使用 tomcat 适配器(此处的文档)算法。一切正常,直到我尝试退出所有会话。

我试过了:

1) 在 keycloak 管理控制台 ui 上:注销所有会话结果:它确实清除了 keycloak 中的所有会话,但不清除客户端应用程序中的浏览器会话。所以我一直登录,直到我手动删除它们。

2)使用HttpServletRequest.logout()http://auth-server/auth/realms/{realm-name}/protocol/openid-connect/logout?redirect_uri=encodedRedirectUri此处的文档),仅从当前客户端注销,而不是作为 SLO

我不确定 OpenID 是否支持 SLO,我找不到任何关于它的可靠文档。

¿有没有办法使用 OpenID 和 Spring Boot 实现单点注销?

小智 6

您可以执行以下操作来注销

   @GetMapping(path = "/logout")
   public String logout(HttpServletRequest request) throws ServletException {
      request.logout();
      return "/";
   }
Run Code Online (Sandbox Code Playgroud)

http

<a href="/logout">Logout</a>
Run Code Online (Sandbox Code Playgroud)

  • 这会使 Spring 会话失效,并且不会执行任何其他操作。但是,由于 SSO 会话不会终止,因此当您导航到另一个页面时,您将自动再次登录。 (4认同)
  • 我可以确认@Ciri 的评论。keycloak 会话没有注销。只有 Spring 无效。 (2认同)