Spring Boot + OAuth2 + Google Login - 如何实现注销

Posted

技术标签:

【中文标题】Spring Boot + OAuth2 + Google Login - 如何实现注销【英文标题】:Spring Boot + OAuth2 + Google Login - How to implement logout 【发布时间】:2015-06-26 08:03:08 【问题描述】:

我有一个使用 Spring Boot + OAuth2 + 通过 Google 登录的身份验证服务器实现。以及用于我的后端数据服务的资源服务器。我使用了 JDBC 令牌存储。一切都很好。但是我很难理解注销的实现。目前,每当用户单击注销时,我只是从浏览器本地存储中删除令牌,但会话在 Auth 服务器中保持活动状态,因此我不需要再次登录。我想要的是每当使用注销时点击我想使会话无效并强制他再次登录。

有什么好办法吗?我的 Spring Boot Auth 服务器配置中目前没有任何注销配置。

谢谢

【问题讨论】:

【参考方案1】:

尝试注册一个 LogoutSuccessHandler 来做到这一点。大致如下:

@Configuration
@EnableWebSecurity
@EnableResourceServer
public class SecurityConfig extends ResourceServerConfigurerAdapter 

    @Bean
    public DefaultTokenServices tokenServices() 
        return new DefaultTokenServices();
    

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception 
        resources.resourceId("myResourceId");
        resources.tokenServices(tokenServices());
    

    @Override
    public void configure(HttpSecurity http) throws Exception 
       // configure http security here...

        http.logout().logoutSuccessHandler(new SimpleUrlLogoutSuccessHandler() 
                      @Override
                      public void onLogoutSuccess(HttpServletRequest request,
                                                  HttpServletResponse response,
                                                  Authentication authentication) 
                          OAuth2AccessToken token = tokenServices().getAccessToken((OAuth2Authentication) authentication);
                          tokenServices().revokeToken(token.getValue());
                      
                  );

    

【讨论】:

以上是关于Spring Boot + OAuth2 + Google Login - 如何实现注销的主要内容,如果未能解决你的问题,请参考以下文章

使用 spring-boot OAuth2 服务器保护的 Spring-boot 应用程序

让 oauth2 与 spring-boot 和 rest 一起工作

Spring Boot Restful WebAPI集成 OAuth2

Spring Boot + Spring Security + Spring OAuth2 + Google 登录

Spring Security +Oauth2 +Spring boot 动态定义权限

使用Spring boot的OAuth2认证服务器和资源服务器