我正在使用MVC视图和Web API的组合开发ASP.NET Core Web应用程序。我还使用Identity进行用户管理。
我现在想为我们的Web API启用Anti-Request-Forgery Tokens。为此,我将Razor视图中的IAntiForgery
服务用于GetAndStoreTokens
,并将RequestToken
转发为$.ajax
作为标题的调用,如the official documentation中所述部分JavaScript。
当我运行与用户登录时执行Web API请求的相应页面(Cookie-Authentication)时,我还可以看到请求令牌已正确设置为HTTP标头(请参阅图像中的橙色框)。但是,ASP.NET Core的Anti-Forgery验证通过以下消息拒绝请求:
防伪令牌验证失败。所需的防伪cookie" .AspNetCore.Antiforgery.ybHEizTXFmU"不存在。
因此,Anti-Forgery-Token(蓝盒子)的cookie部分就是问题 - 密钥以不同的ID开头: .AspNetCore.Antiforgery.lUjKpn5xN20 而不是 .AspNetCore.Antiforgery.ybHEizTXFmU
这怎么可能发生? Web App和Web API位于同一个进程/同一个域中,因此不会执行Cross-Origin-Calls。这是$.ajax
的问题(我无法解释,因为目标网站的浏览器cookie应该被重用)或ASP.NET Core Anti-Forgery(甚至是Identity)模块中的问题?