您可以在您的中设置不同的名称Startup.ConfigureServices
as in:
services.AddAntiforgery(opts => opts.CookieName = "MyAntiforgeryCookie");
For .Net Core 2.0.0或更高版本会有变化:
参考:https://learn.microsoft.com/en-us/dotnet/api/Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions?view=aspnetcore-2.0
为此,请使用以下命令:
services.AddAntiforgery(opts => opts.Cookie.Name = "MyAntiforgeryCookie");
默认情况下AddMvc()
内部调用AddAntiforgery()
,这意味着您将获得默认的 cookie、标头和表单名称。如果您需要/想要使用不同的名称,您可以通过手动调用 AddAntiforgery 来实现,如上所述。
如果您更改 cookie 名称,应该不会对您的应用程序产生任何影响(除非您自己添加了手动使用该 cookie 的代码)。您可能还想更改标题/表单名称,例如官方 Antiforgery 存储库有一个例子它使用 Angular 并将标头更改为标准 Angular XSRF 令牌标头。
为了使用它,添加[ValidateAntiForgeryToken]
到除 GET 请求之外的控制器操作。
只要使用 asp 表单标签助手,您就无需对标准 html 表单执行任何其他操作,请参阅这个问题.
如果您使用 ajax 请求,则需要在请求中包含标头或字段,其中包含生成的令牌。您基本上需要:
- Get an
IAntiforgery
- Call
var tokenSet = antiforgery.GetAndStoreTokens(httpContext);
-
使其可供您的 js 代码使用,以便它了解该值tokenSet.RequestToken
作为带有名称的字段包含在内tokenSet.FormFieldName
或带有名称的标题tokenSet.HeaderName
在每个 ajax 请求中。
- 有一些选项,例如将令牌渲染到 js 布局中脚本部分内的 JS 对象中,添加 JS 可读 cookie(如角度示例中所示),继续渲染 ajax 请求中包含的隐藏字段
- 有一个很好的选项概述在这个答案中
POST/PUT/DELETE/PATCH 请求的目标是包含两件事:
因此防伪中间件可以验证不存在 XSRF。
关于 cookie 名称/域的更新
合理的默认设置是每个应用程序都有自己的 cookie。大多数情况下,您可以使用默认方法获得此信息,因为 cookie 上没有专门设置域,因此 cookie 从请求中获取域。这意味着不同的应用程序有不同的 cookie,除非应用程序托管在同一域中。
您可能只想在特殊情况下共享 cookie,例如,如果您有 2 个应用程序,其中应用程序 A 中的表单发布到应用程序 B。在这些情况下,请确保您使用的域/子域与这两个应用程序匹配,并且都使用相同的域/子域饼干的名字。