Spring Security 5 OAuth 2 社交注销
Posted
技术标签:
【中文标题】Spring Security 5 OAuth 2 社交注销【英文标题】:Spring Security 5 OAuth 2 Social Logout 【发布时间】:2021-01-18 09:35:33 【问题描述】:我已添加到我的 Spring Boot MVC Web 应用程序社交登录功能。它允许用户使用 GitHub、Facebook 或 Google 帐户登录我的应用程序。但我正在努力让 /logout 功能正常工作。即使调用了 /logout 并加载了 logoutSuccessUrl,如果用户再次单击登录链接,则不会再次要求用户提供其用户名或密码。看起来用户仍然是经过身份验证的。
你们如何使用新的 Spring Security 5 OAuth 2 客户端支持实现 /logout?
我使用了新的 OAuth 2 客户端支持。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
spring.security.oauth2.client.registration.facebook.client-id =
spring.security.oauth2.client.registration.facebook.client-secret =
这是我的 HTTPSecurity 配置的样子:
@Override
protected void configure(HttpSecurity http) throws Exception
http.authorizeRequests()
.antMatchers("/").permitAll()
.anyRequest().authenticated()
.and()
.oauth2Login()
.and()
.logout().logoutSuccessUrl("/");
我也试过这种方法:
@覆盖 受保护的无效配置(HttpSecurity http)抛出异常 http
.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers(HttpMethod.POST,"/logout").permitAll()
.anyRequest().authenticated()
.and()
.oauth2Login()
.and()
.logout()
.invalidateHttpSession(true)
.clearAuthentication(true)
.deleteCookies("JSESSIONID")
.logoutSuccessUrl("/").permitAll()
.and()
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
你们如何使用新的 Spring Security OAuth 2 客户端支持注销使用社交 OAuth 2 登录提供程序之一进行身份验证的用户?
【问题讨论】:
【参考方案1】:我目前在我的 chrome 浏览器上登录谷歌,可以查看我的 gmail 等,所以我与谷歌有一个活跃的会话。 如果我要访问您的 spring 应用程序并使用 google 登录,您的 spring 应用程序会将我重定向到 google 身份验证服务器,该服务器检测到我已经登录到 google,因此它知道我是谁,因此它只需要问我同意您的应用程序请求的范围,如果我同意向您的应用程序颁发访问令牌。 现在,如果我想退出您的应用程序,spring security 将使您的应用程序上的会话无效,但它无法控制我与谷歌打开的会话,事实上我不想也退出谷歌。 因此,如果您想再次进入第 3 方的登录屏幕,您需要转到他们的页面并注销。
【讨论】:
没错...但是如果有人在公共计算机上使用我的应用程序,使用他们的 Google 帐户登录,完成后点击注销链接会怎样。他们留下的印象是他们已经退出了。 5 分钟后,另一个用户来了,打开 google.com,并注意到他们已经用其他人的帐户登录了......这是我试图避免的。 啊,Oauth 中还没有标准的方法,这真的归结为社交登录提供商,不幸的是你并没有太多的控制权。 OIDC中有一个prompt=login参数,它指示auth server每次都重新认证用户,但是并不是到处都支持,相信google也不支持。但它有它自己的方式为您的应用程序断开用户连接,请查看注销时的开发人员 API 文档。基本上你需要另外调用提供者注销 api,也许在注销成功处理程序中。 谢谢你,@Wojciech Lesniak!以上是关于Spring Security 5 OAuth 2 社交注销的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security 5 OAuth 2 社交注销
Spring Security 5 OAuth 2.0 ResourceServer 如何与 AuthorizationServer 通信?
配置 Spring Security 5 Oauth 2 以使用 access_token uri 参数
在 Spring Security 5 OAuth Client 和 Spring Boot 2.0 中,authorizationGrantType 不能为空
找不到带有 Spring Security 5.3.2 ReactiveClientRegistrationRepository bean 的反应式 OAuth2