在使用我自己的Web应用程序时,如何检查用户是否仍通过azure sso(oAuth2)登录?

时间:2019-06-18 09:11:06

标签: spring-boot web-applications azure-active-directory spring-security-oauth2

我正在使用Spring Boot开发一个Web应用程序,该应用程序使用Azure AD和OAuth2.0进行身份验证以保护后端。

如果我通过例如Outlook Web App注销,则我的Web应用程序也应该注册此过程并注销(至少在我重新加载或重新打开页面时)。我该如何实施?现在,Web应用程序似乎仍处于登录状态。不幸的是,我没有找到一种一致地实现此行为的方法。仅当我使用自我实现的注销按钮时,它才会显示所需的效果,并且HttpSession无效,并且cookie在删除的地方。

我已经在Web应用程序中通过Azure AD实现了登录和注销(请参见代码)。通过我自己的应用程序的按钮注销后,我会自动从需要Azure SSO的其他Azure应用程序(例如Outlook Web App)中注销。

我已经尝试过Spring MVC - Checking if User is already logged in via Spring Security?此处描述的@PreAuthorize注解,但这似乎不是解决方案。

 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 :(得分:0)

我从未亲自实现此功能,但是如果我没记错的话,所有OAuth2提供程序都具有某种SingleSignOut端点,如果您在注销方法中调用它,它将使用户从所有已连接到该提供商。 刷新Webapp页面后,安全性应识别出该用户不再登录,然后将其重定向到登录页面。 希望我能对您有所帮助。 :)

编辑:我在快速搜索https://github.com/juanzero000/spring-boot-oauth2-sso后发现了这个。