0

我有一个非常奇怪的问题,试图在 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 位于同一解决方案中的单独项目中。帮助 :)

4

0 回答 0