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



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

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

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

我已经尝试了此处描述的@PreAuthorize注释 Spring MVC - 检查用户是否已通过 Spring 安全性登录? 但这似乎不是解决方案。

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);
}

我自己从未实现过这一点,但是如果我没记错的话,所有OAuth2提供程序都有某种SingleSignOut端点,如果您在注销方法中调用它,它将从连接到此提供程序的每个应用程序中注销用户。 刷新 Web 应用程序的页面后,安全性应识别用户不再登录,并将其重定向到登录页面。 希望我能帮你一点。:)

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

最新更新