当前位置: 首页 > 知识库问答 >
问题:

Angularjs正在从spring boot接收XSRF-TOKEN,但没有发送X-XSRF-TOKEN

闾丘诚
2023-03-14

我已经为CSRF设置了Spring Boot 1.5. x。在Spring上测试一切正常:(1)服务器生成令牌并发送给客户端(2)如果客户端发送令牌一切正常。

对于web客户端,我有Spring Boot作为rest API(http://localhost:8088/)和angularjs作为客户端(http://localhost:9000),但它接缝的问题是在angularjs上,它在头键XSRF-TOKEN上发送令牌而不是X-XSRF-TOKEN(Spring正在等待的那个)。

通过读取angularjs留档,应该自动发送此标头密钥(https://docs.angularjs.org/api/ng/service/$超文本传输协议#跨站点-请求-伪造-xsrf-保护)

Angularjs与Spring靴互动的打印屏幕在哪里

在spring中,我使用CORS过滤器,只使用Spring Security特性来生成CSRF令牌

.csrf()
    .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())

在angularjs中,我已经尝试通过拦截器定义头键(只是尝试解决方案)

$httpProvider.defaults.xsrfHeaderName = 'X-XSRF-TOKEN';

var interceptor = ['$rootScope', '$q', 'httpBuffer', '$cookieStore', function ($rootScope, $q, httpBuffer, $cookieStore) {
    return {
        'request': function (config, a, b) {
            return config;
        },

        'requestError': function (rejection) {
            return $q.reject(rejection);
        },

        'response': function (response) {
            $httpProvider.defaults.headers.common['X-XSRF-TOKEN'] = response.headers('XSRF-TOKEN');
            return response;
        },

        'responseError': function (rejection) {

            console.log('rejection', rejection.headers());

            var deferred = $q.defer();

            return $q.reject(rejection);
        }
    };
}];

$httpProvider.interceptors.push(interceptor);

共有1个答案

傅正阳
2023-03-14

需要在响应时存储令牌,并在请求时发送令牌。如果您需要发送所有请求,则重写拦截器上的请求方法:

request: function (config) {
      config.headers['x-xsrf-token'] = stored_token;

      return config;
    }

否则,在单个$http请求上发送它。

 类似资料:
  • 我使用角1.0.4与ASP. NET MVC4 Web API项目。我试图利用角的CSRF保护,但没有用。我可以看到我正在传递一个名为XSRF-TOKEN的cookie,但是当角尝试在响应中添加名为X-XSRF-TOKEN的标头值时,该值显示为未定义。我试着遵循这里的建议,但是超文本标记语言还没有渲染,所以没有找到元素。 我可能会错过什么?是由ASP生成的RequestVerificationTo

  • 我必须保护我的Web应用程序不受CSRF的影响,这是一个非常复杂的问题。Net核心MVC web应用程序,客户端为Angular 9。 这是我尝试过的 在Angular应用程序中,我添加了一个http拦截器来提取和发送请求头中的令牌 现在我从服务器收到一个错误的请求错误(400)

  • 但是在日志中,我看到CSRF令牌在向/login发布凭据时无效。

  • XSRF 是一个 Tango 的 XSRF 中间件. 可以起到防止跨站请求伪造和表单重复提交的作用。 安装 go get github.com/tango-contrib/xsrf 示例 type Action struct { render.Render xsrf.Checker } func (a *Action) Get() error { return a.Rend

  • 我已经阅读了文档和所有相关的问题,但是Angular的XSRF机制对我来说仍然不起作用:我无法用自动附加的X-XSRF-TOKEN头发出POST请求。 我有一个角6应用程序与登录表单。 它是Symfony(PHP 7.1)网站的一部分,当Symfony提供Angular应用程序页面时,会发送正确的Cookie(): 我的app.module.ts包括正确的模块: 然后,在服务的方法中,我发出以下h

  • 我正在更改后端每个请求的xsrf令牌cookie值。我一次对服务器进行多个http调用,但对于某些请求,“xsrf cookie”值和“x-xsrf-header”值不相同。 我试图通过参数手动添加x-xsrf-标头,但标头值不是最新的。 这是我试过的代码,