I Следуя этому руководству:
https://spring.io/guides/tutorials/spring-boot-oauth2/
Я создал собственное приложение, которое использует MitreID Connect и аутентификацию Google с Oauth2.
У меня проблема с выходом из системы как с Google, так и с MitreID, но давайте сосредоточимся на стороне Google. Как выйти из него?
Вы можете увидеть / скачать код с Github:
1) Клиент
https://github.com/Mazzotta13/ClientApplicationForOauth2AndMitre.git
2) Сервер аутентификации
https://github.com/Mazzotta13/MitreIDAndOAuth2.git
На самом деле я понятия не имею. Я пробовал разные вещи, такие как:
использование выхода из клиента successUrl, связанного с сервером авторизации.
Клиент:
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http.antMatcher("/**").authorizeRequests().antMatchers("/webjars/**","/test").permitAll()
.anyRequest().authenticated()
.and()
.logout()
// .addLogoutHandler(new MyLogoutHandler())
.logoutSuccessUrl("http://localhost:8081/exit");
// @formatter:on
}
Сервер проверки подлинности контроллера:
@RequestMapping("/exit")
public void exit(HttpServletRequest request, HttpServletResponse response) {
// token can be revoked here if needed
new SecurityContextLogoutHandler().logout(request, null, null);
try {
//sending back to client app
response.sendRedirect(request.getHeader("referer"));
} catch (IOException e) {
e.printStackTrace();
}
}
Проблема может быть в xhr-токене, который я не знаю, как удалить.
изменить 1.
Чтобы удалить токен, я попробовал это на клиентском контроллере:
@RequestMapping("/logout")
public String logout(HttpServletRequest request, HttpServletResponse response) throws ServletException, URISyntaxException {
SecurityContextHolder.getContext().setAuthentication(null);
request.logout();
SecurityContextHolder.clearContext();
HttpSession session = request.getSession(false);
if (session != null) {
session.invalidate();
}
CookieClearingLogoutHandler cookieClearingLogoutHandler = new CookieClearingLogoutHandler(AbstractRememberMeServices.SPRING_SECURITY_REMEMBER_ME_COOKIE_KEY);
SecurityContextLogoutHandler securityContextLogoutHandler = new SecurityContextLogoutHandler();
cookieClearingLogoutHandler.logout(request, response, null);
securityContextLogoutHandler.logout(request, response, null);
SecurityContextHolder.getContext().setAuthentication(null);
return "You have been logout";
Заранее спасибо.