我已将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());
}
});
或者我没有创建令牌并从后端设置它?
答案 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"。
的教程部分