如何在ASP.NET Core 6中移除或重命名默认antiforgery Cookie?
你之前两次配置没生效的核心原因有两个:
- 配置
HeaderName是指定Antiforgery校验时从请求头读取令牌的字段名,和Cookie命名完全无关,不会修改默认Cookie - Antiforgery配置必须放在
AddControllersWithViews/AddRazorPages/AddIdentity这类内置集成防伪造逻辑的服务之前注册,写在后面的配置会被这些服务内置的默认规则覆盖,这也是你之前配置后只改动了Identity相关Cookie、没影响Antiforgery默认Cookie的根本原因。

自定义重命名Antiforgery Cookie
把Antiforgery配置移到所有MVC/身份认证服务注册之前,完整配置如下:
var builder = WebApplication.CreateBuilder(args); // 注意:该配置必须放在AddControllersWithViews/AddRazorPages/AddIdentity之前 builder.Services.AddAntiforgery(options => { // 自定义Cookie名称 options.Cookie.Name = "your-custom-antiforgery-name"; // 显式指定Cookie作用路径为站点根目录,避免子路径生成重复Cookie options.Cookie.Path = "/"; // 生产环境建议开启以下安全配置 options.Cookie.HttpOnly = true; options.Cookie.SecurePolicy = CookieSecurePolicy.Always; options.Cookie.SameSite = SameSiteMode.Strict; options.Cookie.IsEssential = true; }); // 后续再注册其他业务、认证服务 builder.Services.AddControllersWithViews(); // 若使用Identity,注册代码放在Antiforgery配置之后 // builder.Services.AddDefaultIdentity<IdentityUser>(...) // .AddEntityFrameworkStores<AppDbContext>();
如果配置后还是出现带随机后缀的默认Antiforgery Cookie,检查项目是否自定义了DataProtection的应用隔离标识,显式给Antiforgery配置指定固定Cookie名后,后缀不会再自动追加。
完全移除自动生成的Antiforgery Cookie
风险提示:移除Antiforgery Cookie意味着默认跨站请求伪造防护失效,仅可用于内部接口、已自行实现请求签名校验的场景,公网面向用户的站点不建议关闭。
操作步骤如下:
- 全局关闭自动防伪造校验,配置服务不生成对应Cookie:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllersWithViews(options => { // 全局关闭自动Antiforgery令牌校验 options.Filters.Add(new IgnoreAntiforgeryTokenAttribute()); }); builder.Services.AddAntiforgery(options => { // 置空Cookie名,阻止默认Cookie写入 options.Cookie.Name = string.Empty; });
- 检查所有Razor视图文件,删除所有
@Html.AntiForgeryToken()的调用代码,该方法会主动触发Antiforgery Cookie生成,移除后不会再自动向响应写入该Cookie。
内容的提问来源于stack exchange,提问作者Rico
相关产品推荐
相关产品推荐

