将OAuth2添加到spring-boot时出现CSRF令牌错误

时间:2017-09-08 20:27:55

标签: spring angular rest spring-boot spring-security

我已将OAuth2添加到我的spring-boot应用程序中,到目前为止我只使用google登录。登录部分工作正常,但是当我发送POST请求时,我收到以下错误

{
    "timestamp": 1504901957320,
    "status": 403,
    "error": "Forbidden",
    "message": "Could not verify the provided CSRF token because your session was not found.",
    "path": "/compute"
}

现在我知道我可以在春季禁用CSRF但这不是最佳实践。 spring-boot是自动设置CSRF令牌还是我必须添加一些东西以使其工作。现在我不知道问题是从我的角度代码发出请求时我没有添加令牌

let headers = new Headers();
headers.append("Content-Type", "application/json");

this.http.post("/compute", JSON.stringify(source), { headers }).subscribe((response: Response) => {
  if (response.ok) {
    this.mainpage.terminalComponent.logToTerminal(new Date(), response.text());
  }
}); 

或者我没有创建令牌并从后端设置它?

1 个答案:

答案 0 :(得分:1)

据这位官员Spring Security and Angular JS tutorial说。 Angular内置了对CSRF的支持。

  

Angular根据Cookie有built in support for CSRF(它称之为#34; XSRF")。

您可以在弹簧启动端使用自定义过滤器,将名为XSRF-TOKEN的cookie发送回Angular。

@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
protected static class SecurityConfiguration extends WebSecurityConfigurerAdapter {
  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
      .httpBasic().and()
      .authorizeRequests()
        .antMatchers("/index.html", "/home.html", "/login.html", "/").permitAll().anyRequest()
        .authenticated().and()
      .csrf()
        .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
  }
}

有关详细信息,请阅读标题为" CSRF Protection"。

的教程部分