如何在Asp.Net Core 2中阻止.AspNetCore.Antiforgery Cookie生成?
这个需求在涉及Cookie同意机制的场景下确实很关键,毕竟合规要求优先。针对你的问题,有两种主要解决方案,分别适用于不同的场景:
场景1:完全不需要Antiforgery功能
如果你的应用根本用不到防跨站请求伪造的相关特性(比如[ValidateAntiForgeryToken]注解),可以直接移除默认注册的Antiforgery服务,这样AddMvc就不会自动创建对应的Cookie了。
在ConfigureServices方法中添加以下代码:
public void ConfigureServices(IServiceCollection services) { // 移除所有默认的Antiforgery相关服务 services.RemoveAll<IAntiforgery>(); services.RemoveAll<IAntiforgeryPolicyProvider>(); // 再添加Mvc服务,此时不会自动注入Antiforgery services.AddMvc(); }
场景2:需要保留Antiforgery功能,但要遵守Cookie同意规则
如果你还需要使用Antiforgery的核心功能,但要求必须在用户同意Cookie后才创建对应的Cookie,可以通过Cookie同意中间件+配置Antiforgery选项来实现:
步骤1:启用Cookie同意中间件
在Configure方法中,把UseCookiePolicy放在UseMvc之前:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { // 其他中间件(比如异常处理、静态文件等)... // 启用Cookie同意检查中间件 app.UseCookiePolicy(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
步骤2:配置Cookie策略和Antiforgery选项
在ConfigureServices中,设置Cookie同意规则,并将Antiforgery Cookie标记为非必要:
public void ConfigureServices(IServiceCollection services) { // 配置Cookie策略:要求检查用户是否同意非必要Cookie services.Configure<CookiePolicyOptions>(options => { options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); // 添加Mvc并配置Antiforgery,将其Cookie标记为非必要 services.AddMvc() .AddAntiforgery(options => { // 标记该Cookie为非必要,只有用户同意后才会被创建 options.Cookie.IsEssential = false; }); }
这样配置后,在用户明确同意Cookie之前,.AspNetCore.Antiforgery Cookie不会被自动设置;当用户同意后,Antiforgery会正常创建Cookie并提供服务。
内容的提问来源于stack exchange,提问作者Hansel
相关产品推荐
相关产品推荐

