我目前正在自定义JHipster应用程序以实现单点注销(使用Keycloak SSO),以便当用户从一个应用程序断开连接时,它将使该应用程序和Keycloak上的会话无效。
在I found there中,应用注销后重定向到keycloak注销页面会导致SSO中的用户会话无效。
如果我单击我的应用程序断开连接按钮,那么它将“手动”运行,然后在另一个选项卡中,我进入keycloak的注销页面,我确实注销了,非常完美!
我尝试使用自定义LogoutSuccessHandler在Spring安全性中做同样的事情:
public class ForwardLogoutWithRedirectSuccessHandler implements LogoutSuccessHandler {
private String targetUrl;
public ForwardLogoutWithRedirectSuccessHandler(String targetUrl) {
this.targetUrl = targetUrl;
}
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
throws IOException, ServletException {
if (!this.targetUrl.contains("redirect_uri"))
this.targetUrl = this.targetUrl + "?redirect_uri=" + request.getHeader(HttpHeaders.ORIGIN);
response.sendRedirect(this.targetUrl);
}
}
问题是重定向时,目标域cookie(先前在登录时设置)未在请求中发送。因此,keycloak注销不起作用。
我精确地说,所有必要的CORS标头都用于标头,凭证,方法...
是因为应该在客户端进行重定向吗?