В настоящее время я настраиваю приложение JHipster для реализации единого выхода (с помощью Keycloak SSO), чтобы при отключении пользователя от одного приложения его сеансы в приложении и Keycloak аннулировались.
Из того, что я нашел там , перенаправление после выхода из приложения на страницу выхода из keycloak делает недействительным сеанс пользователя в SSO.
Это работает "вручную", если я нажимаю кнопку отключения моего приложения, а затем на другой вкладке я перехожу на страницу выхода из keycloak, я действительно вышел из системы, отлично!
Я пытался сделать то же самое в Spring Security с помощью настраиваемого LogoutSuccessHandler:
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 целевого домена (ранее установленные при входе в систему) не отправляются в запросе. Таким образом, выход из ключа не работает.
Я уточняю, что все необходимые заголовки CORS были для заголовков, учетных данных, методов, ...
Это потому, что перенаправление должно выполняться на стороне клиента?