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