-1

当我设置 httponly=true 的值时。AutoValidateAntiforgeryTokenAttribute 不验证请求并返回 400 bad request

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

完成此 cookie 后变得安全,如下所示

set-cookie: XSRF-TOKEN={{Cookie Value}}; path=/; samesite=lax; httponly

但是 AutoValidateAntiforgeryTokenAttribute 返回 400 bad request

when changed the Value HttpOnly = true to HttpOnly = false

它工作得很好。有没有办法在 asp core 和 angular 7 中将 antiforgerytoken cookie 设置为 httponly。如果它不起作用,请指导我了解其背后的原因。

4

1 回答 1

1

不,不可能将此特定 cookie 设置为 http-only。要了解原因,请查看 ASP.NET Core文档中的以下部分:

AngularJS 使用约定来处理 CSRF。如果服务器发送一个名为 的 cookie XSRF-TOKEN,AngularJS$http服务会在向服务器发送请求时将 cookie 值添加到标头中。

这谈到了 AngularJS 和$http,但相同的机制用于 Angular 及其HttpClient服务(请参阅 Angular文档)。

为了能够将 cookie 值添加到标头,Angular 必须能够从 cookie 中读取值。当您将 cookie 设置为 时HttpOnly,Angular 无法从 cookie 中读取值(就好像它甚至不存在一样)。因此该值不会被发送并且服务器拒绝该请求。

于 2020-01-09T13:07:48.630 回答