ASP.NET Core 通过 antiForgery.GetAndStoreTokens 生成的 CSRF Token 会被存储下来吗?还是随机生成,仅校验是否和请求头相同?对所有 API 请求 verify 并 rotate CSRF Token 对性能影响多大?
1
leeg810312 2022-04-10 22:29:36 +08:00 via Android
建议多参考官方文档,上面有方法说明还有返回对象的属性说明,token 按请求生成,附在 cookie 中一起发回,提交时带上,检查是否和请求匹配。如果是 web API ,本身就得支持跨域,没有 crsf 问题,也就没有必要调用这个方法
|
2
dotw2x 2022-04-10 22:59:13 +08:00
如果使用的是 cookieToken 不会存储,会响应到 cookie 里。新版应该默认用了 core 的数据保护机制来生成 cookie,每次都会不一样。然后服务器收到 cookie 后进行解密构造 AntiforgeryToken 进行 token 信息比对,不一致则拒绝。
对于性能见仁见智了,从我们自己站点日常使用上暂时没遇到性能问题。 如果担心性能或不满足于现在的校验机制,你可以自己实现 AntiForgeryToken 机制,ABP 也是这么干的。 在 asp.net core 框架源码中关键内容参考这里: [aspnetcore/src/Antiforgery/src/Internal/DefaultAntiforgery.cs]( https://github.com/dotnet/aspnetcore/blob/c85baf8db0c72ae8e68643029d514b2e737c9fae/src/Antiforgery/src/Internal/DefaultAntiforgery.cs) |