我正在使用MVC视图和Web API的组合开发ASP.NET核心Web应用程序 . 我还使用Identity进行用户管理 .

我现在想为我们的Web API启用Anti-Request-Forgery Tokens . 为此,我将Razor视图中的 IAntiForgery 服务用于 GetAndStoreTokens ,并将 RequestToken 转发为 $.ajax 作为 Headers 调用,如JavaScript中的the official documentation所述 .

当我运行与用户登录时执行Web API请求的相应页面(Cookie-Authentication)时,我还可以看到请求令牌已正确设置为HTTP标头(请参阅图像中的橙色框) . 但是,ASP.NET Core的Anti-Forgery验证通过以下消息拒绝请求:

Antiforgery token validation failed. The required antiforgery cookie ".AspNetCore.Antiforgery.ybHEizTXFmU" is not present.

因此,Anti-Forgery-Token(蓝色框)的cookie部分就是问题 - 密钥以不同的ID开头: .AspNetCore.Antiforgery.lUjKpn5xN20 而不是 .AspNetCore.Antiforgery.ybHEizTXFmU

Request Headers

How can this happen? Web App和Web API位于同一进程中/位于同一域中,因此不会执行跨域调用 . 这是 $.ajax (我无法解释,因为目标网站的浏览器cookie应该被重用)或ASP.NET Core Anti-Forgery(甚至Identity)模块中的问题?