Spring Security - выход из OpenID Connect - PullRequest
0 голосов
/ 14 марта 2020

мы пытаемся интегрировать аутентификацию нашего веб-портала с 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);
        }
    }

Любые указатели или пример, который может помочь с этим? Спасибо

...