spring-boot - SpringBoot - Angular 5 - CSRF

标签 spring-boot csrf csrf-protection angular5

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

我有一个

  • SpringBoot 服务器与 SpringSecurtiy 4.3。
  • Angular 5 应用程序

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

    在 SpringBoot 上,我需要添加这些安全配置:
    http
    .csrf()
    .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
    

    在 Angular 上,我需要添加这些模块:
    imports: [
        ...,
        HttpClientModule,
        HttpClientXsrfModule, //(!)
    ...
    

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

    -但每个人都不同。那是对的吗?我希望在客户端 session 中是一样的。

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

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

    最佳答案

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

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

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

    然后手动提取 token
    const token = this.tokenExtractor.getToken() as string;
    

    并将其添加到标题中
    this.http.post<any>(url, body, {headers: new HttpHeaders().set('X-XSRF-TOKEN', token)})
    

    侯赛姆

    关于spring-boot - SpringBoot - Angular 5 - CSRF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47334609/

    相关文章:

    java - 使用 native 查询从 Spring Data 返回自定义对象

    cookies - Chrome 51+ 中 SameSite cookie 属性的允许值是多少

    angular - (任何窗口).global = window;

    java - 未从 application.properties 中获取 Spring Boot JOOQ sql 方言

    java - 使用 Spring Boot 进行 Flyway 修复

    json - 如何在 Spring Controller 单元测试中访问 CSRF token ?

    security - OpenID Connect 服务器流中的 "state"参数可以防止什么攻击?

    asp.net-mvc - 不记名代币和 CSRF

    java - 如何使用 YAML 文件在 Spring Boot 中配置 Swagger?

    python - Django:名称 'csrf_token' 未定义