【问题标题】:SpringBoot - Angular 5 - CSRFSpringBoot - Angular 5 - CSRF
【发布时间】:2018-04-30 06:48:34
【问题描述】:

我现在迷路了,需要一些帮助。

我有一个

  • 带有 SpringSecurtiy 4.3 的 SpringBoot 服务器。
  • Angular 5 应用程序

并且想要启用 CSRF 保护,因为它应该在默认情况下启用(文档说) :不是!

在 SpringBoot 上我需要添加这些安全配置:

http
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());

在 Angular 上我需要添加这些模块:

imports: [
    ...,
    HttpClientModule,
    HttpClientXsrfModule, //(!)
...

服务器在每个响应中发送 XRSF-TOKEN。

-但每个人都不同。那是对的吗?我希望在客户端会话中也是如此。

-这里的主要问题是 Angular5 在它的 post 调用中仍然没有使用 XRSF-TOKEN(例如)。它不会在其请求中设置 X-XSRF-TOKEN。

我做错了什么或错过了什么?

【问题讨论】:

  • 另一种解决方案可以找到here

标签: spring-boot csrf csrf-protection angular5


【解决方案1】:

我遇到了同样的问题,我认为这是由于 angular 版本 5 导致的回归。

在解决此问题之前,您可以像我一样添加自己的“X-XSRF-TOKEN”标头。

 constructor(private http: HttpClient, private tokenExtractor: HttpXsrfTokenExtractor) {
    }

然后手动提取令牌

const token = this.tokenExtractor.getToken() as string;

并将其添加到标题

this.http.post<any>(url, body, {headers: new HttpHeaders().set('X-XSRF-TOKEN', token)})

侯赛姆

【讨论】:

  • 谢谢,这真的很有帮助。 :) 不再需要停用它。
  • @H.abidi 我正在尝试您的代码,但在 const token 中得到 null 。我正在使用 Angular 6..任何其他相同的解决方案?
猜你喜欢
  • 2020-04-11
  • 2019-06-18
  • 2020-02-20
  • 2018-08-19
  • 2018-11-17
  • 2019-03-09
  • 1970-01-01
  • 2016-01-07
  • 1970-01-01
相关资源
最近更新 更多