мы пытаемся интегрировать аутентификацию нашего веб-портала с IdentityServer3 через спецификацию OpenID Connect.
В настоящее время мы можем войти без, и это сработало. Однако реализация выхода из системы не работает должным образом.
Мы нашли различные примеры для inte rnet, но ни один из них не работал. У нас есть код, подобный этому, в нашей WebSecurityConfigurerAdapter
:
http
.antMatcher("/**")
.authorizeRequests()
.anyRequest().authenticated()
.and()
.oauth2Login()
.and()
.logout()
.invalidateHttpSession(true)
.clearAuthentication(true)
.deleteCookies("JSESSIONID")
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"));
и форме для отправки сообщения о выходе из системы:
<form th:action="@{/logout}" method="post" id="userform" th:fragment="header"/>
Это ненадолго перезагрузит страницу, но когда go Возвращаясь к тому же экрану, он может загружаться без повторной аутентификации пользователя, как будто никогда не вызывался выход из системы.
Понял, что в обнаружении есть endsession_endpoint
из обнаружения do c IdentityServer3, однако это кажется что версия Spring Boot, которую мы используем (2.1.7), и spring-boot-starter-oauth2-client в версии 2.2.4, похоже, не поддерживают ее.
Я также пытался реализовать postlogout
метод, который перенаправляет на endsession_endpoint
IdentityServer3, и он действительно перенаправляет на экран, где присутствует кнопка выхода из системы. Но после выхода из системы и перехода обратно на мой портал токен все еще остается в силе и загружается без входа в систему. Код наподобие этого:
@RequestMapping(value = {"/postlogout"})
public void postLogout(HttpServletRequest request, HttpServletResponse response) {
logger.info("Postlogout received!");
try {
response.sendRedirect("https://login.xxx.com/LoginHost/core/connect/endsession");
} catch (IOException e) {
logger.error("Error postlogout",e);
}
}
Любые указатели или пример, который может помочь с этим? Спасибо