小编yoh*_*hny的帖子

在 ASP .NET Core Web API 中使用没有身份的 cookie 身份验证时如何在登录时刷新 CSRF 令牌

我有一个 ASP .NET Core 3.1 后端,带有 angular 9 前端(基于 dotnet angular 模板,只是将 angular 更新为 v9)。我使用 cookie 身份验证(我知道 JWT 更适合 SPA,以此作为实验)并且我还在服务器端添加了对 CSRF 保护的支持:

services.AddAntiforgery(options =>
{
   options.HeaderName = "X-XSRF-TOKEN"; // angular csrf header name
});
Run Code Online (Sandbox Code Playgroud)

我有服务器端设置来自动检查 CSRF 使用

options => options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute())
Run Code Online (Sandbox Code Playgroud)

因此不会根据 CSRF 检查 GET 请求,但会检查 POST。

一开始,angular 应用程序发出 GET 请求以api/init在引导之前获取一些初始数据。在服务器端,此操作按如下方式初始化 CSRF:

// init action body
var tokens = _antiForgery.GetAndStoreTokens(HttpContext);
Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken, new CookieOptions
{
   HttpOnly = false
});
// return some inital data DTO
Run Code Online (Sandbox Code Playgroud)

这按预期工作 - GET …

authentication csrf asp.net-web-api asp.net-core angular

5
推荐指数
1
解决办法
2127
查看次数