如何在使用 OAuth2 社交登录保护 REST API 的同时配置 Spring Boot 登录页面
Posted
技术标签:
【中文标题】如何在使用 OAuth2 社交登录保护 REST API 的同时配置 Spring Boot 登录页面【英文标题】:How to configure Spring boot login page while securing REST API using OAuth2 social login 【发布时间】:2021-11-05 23:04:13 【问题描述】:我有一个使用 Google 的 Spring OAuth2 身份验证的示例 Web 应用程序。 HttpSecurity配置如下:
protected void configure(HttpSecurity http) throws Exception
http.authorizeRequests()
.antMatchers("/", "/login", "/oauth/**", "/oauth2/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin().permitAll()
.loginPage("/login")
.usernameParameter("email")
.passwordParameter("pass")
.defaultSuccessUrl("/list")
.and()
.oauth2Login()
.loginPage("/login")
.userInfoEndpoint()
.userService(oauthUserService)
.and()
.successHandler( ... NOT SHOWN ...)
.and()
.logout().logoutSuccessUrl("/").permitAll()
.and()
.exceptionHandling().accessDeniedPage("/403")
;
现在,无论何时发出未经身份验证的请求,此配置都会将浏览器重定向到登录页面。此页面显示了指向 Google 身份验证 Login with Google 的链接以及登录表单。
但我希望将浏览器直接重定向到 Google 的身份验证服务器,而不是应用程序的登录页面。我不想要任何表单登录/注册功能。我只希望用户使用 Google 登录。
需要在上述配置中进行哪些更改才能实现这一目标?
【问题讨论】:
【参考方案1】:尝试从您的配置中删除 formLogin
和 loginPage
..
protected void configure(HttpSecurity http) throws Exception
http.authorizeRequests()
.antMatchers("/", "/login", "/oauth/**", "/oauth2/**").permitAll()
.anyRequest().authenticated()
.and()
.oauth2Login()
.userInfoEndpoint()
.userService(oauthUserService)
.and()
.successHandler( ... NOT SHOWN ...)
.and()
.logout().logoutSuccessUrl("/").permitAll()
.and()
.exceptionHandling().accessDeniedPage("/403")
;
【讨论】:
太酷了。所以,根本不需要设置 .loginPage!以上是关于如何在使用 OAuth2 社交登录保护 REST API 的同时配置 Spring Boot 登录页面的主要内容,如果未能解决你的问题,请参考以下文章
使用 Passport 和 OAuth2 + 社交网络的 NodeJS REST 身份验证
如何实现FosOAuthServerBundle来保护REST API?
Spring Boot 和 OAuth2 社交登录,无法获取 refreshToken