我有一个非常奇怪的问题,试图在 ASP.Net Core 中的角度 $http post 调用上实现 XSRF。
POST Register 工作正常并具有以下签名:
[HttpPost("Register")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> PostRegister([FromBody]AccountRegisterPostRequest req)
但是 POST Logout 返回具有相同签名的 400:
[HttpPost("Logout")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> PostLogout()
{
return Ok();
}
配置服务:
services.AddAntiforgery(options => options.HeaderName = "X-XSRF-TOKEN");
services.AddMvc();
services.Configure<MvcOptions>(c => c.Filters.Add(new RequireHttpsAttribute()));
配置:
app.Use(next => context =>
{
if (string.Equals(context.Request.Path.Value, "/", StringComparison.OrdinalIgnoreCase))
{
var tokens = antiforgery.GetAndStoreTokens(context);
context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken,
new CookieOptions() { HttpOnly = false });
}
return next(context);
});
app.UseStaticFiles();
角度调用如下所示:
$http.post("/api/Account/Logout")
.then(function (result) {
console.log(result);
})
API 位于同一解决方案中的单独项目中。帮助 :)