将 Spring 引导后端 + oauth 与前端应用程序集成时出现问题

Problem with integrating Spring Boot backend + oauth with frontend app

我有后端 Spring 启动应用程序,它使用来自 Spotify api 的数据,它需要用户登录才能为我的应用程序提供身份验证令牌。它工作正常,但我不知道如何将它与前端应用程序集成。从服务器应用程序外部 (localhost:8080) 发送请求时,我总是收到 403 代码。

问题可能是我应该在前端请求 Spotify 令牌,然后以某种方式将其传递到后端,但老实说,我什至不知道我应该 google 什么才能实现这一点。

这里有一些关键点类:

@Configuration
@EnableOAuth2Sso
public class SpotifyConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception{
        http.authorizeRequests().antMatchers("/login").authenticated();
    }

}
And inside @RestController:
@GetMapping("/user")
    public Principal user(Principal principal){
        return principal;
    }

@GetMapping("/")
    public Principal home(Principal principal){
        return principal;
    }

@GetMapping("/login")
    public Principal login(Principal principal){
        return principal;
    }

这是我第一次接触 Spring 安全相关的东西,我不知道这里发生了什么 xd

首先,由于这行代码,spring 安全禁止了所有请求。

http.authorizeRequests().antMatchers("/login").authenticated();

您必须授予对特定请求或任何请求的访问权限,但在您的情况下,您已被禁止所有请求。这就是为什么当您尝试通过 rest 访问 spring 启动应用程序时收到 403 状态(禁止)

因此,您有多种选择来解决这个问题。我给你两次。

  1. 如果您希望从每个请求获得访问权限,请将上面的 spring 安全性中的代码行更改为:
http.authorizeRequests().antMatchers("/**").permitAll();
  • “/**”表示所有文件夹和子文件夹
  • permitAll() 意味着 spring 安全授予与 antMatchers 函数匹配的所有请求的访问权限。
  1. 如果您想授予某些请求的访问权限,通过登录和其他安全措施对用户进行身份验证,您可以这样开始:
http.authorizeRequests()
.antMatchers("/somePath").authenticated();
.antMatchers("/somePath2").authenticated();
.antMatchers("/somePath3").permitAll();

但是 Spring 安全性比这要深得多,所以如果您想更深入地了解可用的多重配置,您需要阅读官方文档。 https://docs.spring.io/spring-security/site/docs/current/reference/html5/#preface,还有很多简单的配置例子,玩得开心。