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

API cookie问题-尝试在angular中创建XSRF/CSRF令牌

强硕
2023-03-14

用于初始化会话的Web API方法正在成功返回cookie。前端是angular的,所以我调用cookie XSRF-TOKEN,因为angular说它将接受该值,并在所有后续请求中将其转换为名为X-XSRF-TOKEN的头。

作为参考,创建cookie的WebAPI获取控制器方法如下

        ...
        HttpResponseMessage resp = new HttpResponseMessage() {
            Content = new JsonContent(results)
        };
        if (results.Token != null) {
            var cookie = new CookieHeaderValue("XSRF-TOKEN", results.Token);
            cookie.Expires = DateTimeOffset.Now.AddDays(365);
            cookie.Domain = Request.RequestUri.Host;
            cookie.Path = "/";
            cookie.HttpOnly = false;
            resp.Headers.AddCookies(new CookieHeaderValue[] { cookie });
        }
        return resp;
        ...

使用Fiddler,我可以在响应中看到cookie。现在我期待两件事

  1. 对同一域的所有后续API调用应在请求头中包含此cookie
  2. Angular应该是添加了我前面提到的X-XSRF-TOKEN报头

两者都没有发生(我正在和提琴手核实)。我尝试过在同一个域(如localhost)和不同的域中使用网站和应用编程接口。

我查过的一些来源:

    https://docs.angularjs.org/api/ng/service/超文本传输协议
  • https://stormpath.com/blog/angular-xsrf

我还尝试添加

$httpProvider.xsrfWhitelistedOrigins = [webServicesPath];

其中webServicesPath是我用于API路径的变量,但没有区别。

共有1个答案

景书
2023-03-14

您应该使用如下内容

public void Configure(IApplicationBuilder app, IAntiforgery antiforgery) {

    context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken, new CookieOptions() { HttpOnly = false });

}

public void ConfigureServices(IServiceCollection services) {

    // Angular's default header name for sending the XSRF token.
    services.AddAntiforgery(options => options.HeaderName = "X-XSRF-TOKEN");    
}
 类似资料:
  • 我正在更改后端每个请求的xsrf令牌cookie值。我一次对服务器进行多个http调用,但对于某些请求,“xsrf cookie”值和“x-xsrf-header”值不相同。 我试图通过参数手动添加x-xsrf-标头,但标头值不是最新的。 这是我试过的代码,

  • 我正在从事一个有悬而未决的checkmarx问题(最近从veracode迁移过来)的项目,这个安全性方面存在一个问题: Checkmarx不喜欢它,给我看这个: 证券配置。java从disable的用户请求中获取参数。该参数值在代码中流动,最终用于访问应用程序状态改变功能。这可能会启用跨站点请求伪造(XSRF) 还要补充的是,在这个springboot中发出的请求是用idtoken处理的,根据我找

  • 我目前正在尝试创建一个小型web应用程序,Angular 2作为前端,Rails 4作为后端-我的后端只是一个API,而我的前端只是发送请求。 我今天在试图提交帖子请求时遇到了CSRF令牌真实性错误-如何将这些CSRF标题添加到我的Angular 2标题中?

  • 从通过API提交的表单中发布数据是成功的。 但是,在将X-CSRF-TOKEN添加到头并设置之后,结果数据没有发布到名为 错误: 加载失败http://localhost/simple_api/insert.php:对飞行前请求的响应未通过访问控制检查:当请求的凭据模式为“包括”时,响应中“访问控制允许来源”标头的值不得为通配符“*”。起源'http://localhost:4200因此,不允许访

  • 在angular文档中,提到angular将在post请求的头中自动发送cookie的值。文档链接 但它没有为我发送标题。这是我的密码 Nodejs用于设置cookie的代码 我在app.module.ts中使用了http客户端 **以上代码仅用于调试目的。我没有set-csrf终结点。 但是当我发送帖子请求时,它不会发送任何标题。我不能调试。 我也在angular的github存储库中添加了这个

  • 我试图通过一个到Spring(基本身份验证)安全RESTAPI的绝对URL发出POST请求 读到Angular没有为绝对URL自动将X-XSRF-TOKEN插入请求头之后,我尝试实现一个HttpInterceptor来添加TOKEN。 在我最初的 /signinPOST请求中,我创建了必要的授权:基本标头,以确保Spring验证请求。 返回的响应标头包含预期的set-cookie令牌: 但是,在我