Spring boot Security, Oauth2 logout, invalidate session 以便在授权服务器中经过认证和批准周期

Posted

技术标签:

【中文标题】Spring boot Security, Oauth2 logout, invalidate session 以便在授权服务器中经过认证和批准周期【英文标题】:Spring boot Security, Oauth2 logout, invalidate session in order to go through the authentication and approval cycle in the authorization server 【发布时间】:2016-12-29 04:35:32 【问题描述】:

我一直在关注 Dave Syer 教程,使用 OAuth2 进行 SSO,第 5 部分 https://github.com/spring-guides/tut-spring-security-and-angular-js/tree/master/oauth2

它有 UI/API 网关、资源服务器和授权服务器。 当我从 UI/API 网关应用程序中单击注销时,我得到以下信息,enter image description here Cors 问题

Dave Syer 教程中当前发生的情况是,当用户单击注销时,它会将身份验证标志更改为 false,从而看起来用户已注销,但他们只是从 UI/API 网关应用程序注销。

当用户单击登录时,请记住他们没有从身份验证服务器注销。因此,用户不会再次经历认证和批准周期。

我想要的是,当用户单击注销并尝试再次登录时,用户必须输入用户名和密码。事实上,它们应该重新开始,这意味着系统应该使会话和/或令牌无效。

我一直在努力寻找解决方案。谁能指出如何解决/实现这一点。

【问题讨论】:

我也遇到了同样的问题。 我也遇到了同样的问题。 【参考方案1】:
@SuppressWarnings("null")
    @RequestMapping(value="/login")
    public String login(HttpServletRequest request)
         HttpSession session= request.getSession();
        SecurityContextHolder.clearContext();
        if(session == null) 
            session.invalidate();
        
        return"login";
    

【讨论】:

虽然这段代码 sn-p 可能会解决问题,但您应该添加一些解释...【参考方案2】:

我目前面临同样的问题。到目前为止,我发现这似乎是一个普遍的 SSO 设计问题,因为不清楚用户是只想从(网关)应用程序还是从整个系统(oauth2 服务器)注销。您可以在 Dave Syers 博客文章的标题 The Logout Experience 下找到有关此 here 的更多信息。希望对您有所帮助。

【讨论】:

以上是关于Spring boot Security, Oauth2 logout, invalidate session 以便在授权服务器中经过认证和批准周期的主要内容,如果未能解决你的问题,请参考以下文章

带有 WSO2 身份服务器的 Spring Cloud Security

Spring security oauth 令牌提取

如何使用 redis 使用 spring-security-oauth2 持久化令牌

Spring Security with Boot

spring boot Security 简单使用

Spring Boot Security