Как проверить, вошел ли пользователь в систему через Azure SSO (oAuth2), используя мое собственное веб-приложение? - PullRequest
0 голосов
/ 18 июня 2019

Я разрабатываю веб-приложение со Spring Boot, используя Azure AD и OAuth2.0 для аутентификации для обеспечения безопасности бэкенда.

Если я выйду из системы, например, через Outlook Web App, мое веб-приложениеследует зарегистрировать этот процесс и выйти из системы (по крайней мере, если я перезагрузлю или снова открою страницу).Как мне это реализовать?Теперь веб-приложение выглядит как еще вошедшее в систему. К сожалению, я не нашел подходов для последовательной реализации этого поведения.Только если я использую самореализованную кнопку выхода из системы, она показывает желаемый эффект, и HttpSession становится недействительным, а файлы cookie удаляются.

Я уже реализовал вход и выход из системы через Azure AD в моем веб-приложении (см код).Как только я выхожу через кнопку собственного приложения, я автоматически выхожу из других приложений Azure (например, Outlook Web App), для которых требуется единый вход Azure.

Я уже попробовал аннотацию @PreAuthorize, описанную здесь Spring MVC - Проверка, если пользователь уже вошел в систему через Spring Security? , но, похоже, это не решение.

 protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .oauth2Login()
                .userInfoEndpoint()
                .oidcUserService(oidcUserService);

        http.logout()
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .invalidateHttpSession(true)
                .deleteCookies("JSESSIONID")
                .clearAuthentication(true)
                .logoutSuccessUrl("https://login.microsoftonline.com/common/oauth2/logout");
}

Перенаправление на главную страницу:

    @GetMapping("login/oauth2/code/azure")
    public ModelAndView redirectToRoot(ModelMap modelMap) {
            return new ModelAndView("redirect:/", modelMap);
    }

1 Ответ

0 голосов
/ 18 июня 2019

Я никогда не реализовывал это сам, но если я правильно помню, у всех провайдеров OAuth2 есть какая-то конечная точка SingleSignOut, если вы вызовете это в своем методе выхода из системы, он выйдет из системы из всех подключенных приложений. этому провайдеру. После обновления страницы вашего веб-приложения система безопасности должна распознать, что пользователь больше не входит в систему, и перенаправить его на страницу входа. Надеюсь, я смогу тебе немного помочь. :)

Редактировать: Я нашел это после быстрого поиска: https://github.com/juanzero000/spring-boot-oauth2-sso.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...