我正在使用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);
}
答案 0 :(得分:0)
我从未亲自实现此功能,但是如果我没记错的话,所有OAuth2提供程序都具有某种SingleSignOut
端点,如果您在注销方法中调用它,它将使用户从所有已连接到该提供商。
刷新Webapp页面后,安全性应识别出该用户不再登录,然后将其重定向到登录页面。
希望我能对您有所帮助。 :)
编辑:我在快速搜索https://github.com/juanzero000/spring-boot-oauth2-sso后发现了这个。