您可以在 Startup.ConfigureServices 中设置不同的名称,如下所示:
services.AddAntiforgery(opts => opts.CookieName = "MyAntiforgeryCookie");
对于.Net Core 2.0.0 or greater there will be changes:
参考:
https://docs.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 的代码)。您可能还想更改标头/表单名称,例如使用 Angular 并将标头更改为标准 Angular XSRF 令牌标头的官方 Antiforgery repo has an example。
为了使用它,请将[ValidateAntiForgeryToken] 添加到 GET 请求以外的控制器操作中。
只要您使用 asp 表单标签助手,您就不必对标准 html 表单做任何其他事情,请参阅this question。
如果您使用 ajax 请求,那么您将需要在您的请求中包含一个标头或一个包含生成令牌的字段。你基本上需要:
- 获取
IAntiforgery
- 致电
var tokenSet = antiforgery.GetAndStoreTokens(httpContext);
-
使其可用于您的 js 代码,以便它知道值 tokenSet.RequestToken 将作为名称为 tokenSet.FormFieldName 的字段或名称为 tokenSet.HeaderName 的标头包含在每个 ajax 请求中。
目标是让 POST/PUT/DELETE/PATCH 请求包含 2 个内容:
所以防伪中间件可以验证没有 XSRF。
关于 cookie 名称/域的更新
合理的默认设置是每个应用程序都有自己的 cookie。您通常使用默认方法得到它,因为 cookie 上没有专门设置域,因此 cookie 从请求中获取域。这意味着不同的应用程序使用不同的 cookie,除非应用程序托管在同一个域中。
- 阅读更多关于 cookie 工作原理的信息here
您可能只想在特殊情况下共享 cookie,例如,如果您有 2 个应用程序,其中应用程序 A 中的一个表单发布到应用程序 B。在这些情况下,请确保您使用的域/子域与这两个应用程序以及两者都匹配使用相同的 cookie 名称。