Spring Boot OAuth2单点注销(注销)

我正在考虑为我的应用程序使用OAuth2。我尝试实现的体系结构如下:

  • 我将拥有自己的(仅此)授权服务器
  • 一些资源应用程序使用授权服务器验证对资源的访问
  • 某些客户端应用程序(网络,移动设备)会将用户重定向到授权服务器进行身份验证,如果成功,则会在资源应用程序上使用api。

到目前为止,我已经成功实现了3个基本应用程序(1个身份验证服务器,1个资源服务器和1个客户端)之间的交互。我无法正常工作的是注销功能。我已经阅读了Dave Syer在其教程中描述的“非常棘手的问题”,但是在这种情况下,我确实需要用户注销后重新登录。我尝试给访问令牌和刷新令牌提供几秒钟的时间,但是没有在到期时提示再次登录,而是在客户端应用程序上获得了NPE。我也尝试了这篇文章中提出的解决方案从令牌存储中删除令牌,但这不起作用。对我而言,单点注销是此实现的理想行为。如何使用Spring Boot" title="Spring Boot">Spring Boot Oauth2实现此目的。如果由于某种原因无法实现,我可以使用哪些替代方案来使用Spring Boot来实现集中式安全性?

提前致谢。

回答:

经过大量测试,我意识到只需重定向到AuthServer并以编程方式进行注销即可解决此问题:

  • 在客户端应用程序(WebSecurityConfigurerAdapter)中:

@Override

protected void configure(HttpSecurity http) throws Exception {

http

.logout()

.logoutSuccessUrl("http://your-auth-server/exit");

}

  • 在授权服务器中:

@Controller

public class LogoutController {

@RequestMapping("/exit")

public void exit(HttpServletRequest request, HttpServletResponse response) {

// token can be revoked here if needed

new SecurityContextLogoutHandler().logout(request, null, null);

try {

//sending back to client app

response.sendRedirect(request.getHeader("referer"));

} catch (IOException e) {

e.printStackTrace();

}

}

}

以上是 Spring Boot OAuth2单点注销(注销) 的全部内容, 来源链接: utcz.com/qa/435531.html

回到顶部