【发布时间】:2017-12-20 20:12:25
【问题描述】:
.Net Core api 层和带有 Angular2 前端的 .Net Core MVC。在本地,它们运行在不同的网站(localhost:xxx1 和 localhost:xxx2)并发布,api 运行在前端的子目录中。
我已经像这样设置了 .Net Core Antiforgery:
在配置服务部分:
services.AddAntiforgery(options =>
{
options.HeaderName = "X-XSRF-TOKEN";
});
在配置部分:
app.Use(next => context =>
{
var tokens = antiforgery.GetAndStoreTokens(context);
context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken, new CookieOptions() { HttpOnly = false });
return next(context);
});
当我最初启动网站并在 Chrome 中浏览网站时,我确实获得了 2 个 Antiforgery 令牌(.AspNetCore.Antiforgery.xxxx 和 XSRF-TOKEN),当我进行 get/post/etc 调用时,我看到了x-xsrf-token 标头被添加到调用中。
问题出在每次调用时,api 返回一个新的 XSRF-TOKEN cookie 但本地我的 cookie 没有更新,它始终包含原始值。在线发布时,不会发生这种情况,cookie 每次都会更新。
我尝试在本地设置站点以使用 localhost.somedomain.com,但这没有用。
关于我做错了什么或如何让它在本地工作的任何建议?
【问题讨论】:
-
您能否在问题中添加您在哪个项目中添加了防伪。我感觉你已经将它添加到你的 web 项目中,而它实际上应该在你的 API 项目中。还要注意,cookie不需要更新,可以多次调用。
-
防伪码在web api中。我用下面的答案想通了
标签: asp.net-core antiforgerytoken