You need to enable JavaScript to run this app. Asp.Net Core 3+ [Authorize]特性自定义未授权重定向配置
优惠活动
大模型
产品
解决方案
定价
更多

Asp.Net Core 3+ [Authorize]特性自定义未授权重定向配置

Asp.Net Core 3.1 自定义授权未授权跳转路径配置方案

核心原理

Asp.Net Core 3.1中使用AddDefaultIdentity接入身份认证时,框架默认使用Identity.ApplicationCookie作为登录态存储方案,该方案默认将未授权请求重定向到Identity脚手架生成的/Identity/Account/SignIn Razor页面。跳转路径的配置不会随旧版本的通用Cookie配置项生效,必须单独对Identity注册的应用Cookie参数做覆盖。

具体调整步骤

1. 覆盖Identity Cookie的默认跳转路径

在ConfigureServices方法中,对原有AddDefaultIdentity的链式调用追加ConfigureApplicationCookie配置,修改登录、权限不足的跳转路径为业务自定义地址:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    
    services.AddDefaultIdentity<AgentUser>(options => options.SignIn.RequireConfirmedAccount = false)
        .AddEntityFrameworkStores<ApplicationDbContext>()
        // 新增:覆盖Identity应用Cookie的默认配置
        .ConfigureApplicationCookie(options =>
        {
            // 自定义未授权访问的跳转目标
            options.LoginPath = "/Account/SignIn";
            // 可选:自定义权限校验不通过的跳转目标
            options.AccessDeniedPath = "/Account/AccessDenied";
        });

    services.AddControllersWithViews();
    // 未启用Razor Pages时保持注释即可
    //services.AddRazorPages();
}

2. 清理冗余的路由配置

如果项目未使用Identity自带的Razor页面,需要在Configure方法的端点配置中移除冗余的Razor Pages路由映射,避免路由匹配冲突:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        // HSTS默认值为30天,生产环境可根据实际场景调整
        app.UseHsts();
    }
    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();
    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
        // 移除冗余的Razor Pages映射,未使用时不会产生实际路由
        // endpoints.MapRazorPages();
    });
}

注意避坑

  • 自定义的Account/SignIn登录动作必须标记[AllowAnonymous]特性,否则未登录用户访问登录页时会被认证中间件拦截,陷入无限重定向循环。参考写法:
public class AccountController : Controller
{
    [AllowAnonymous]
    public IActionResult SignIn(string returnUrl = null)
    {
        // 登录页业务逻辑
    }
}
  • 不要单独在AddAuthentication().AddCookie()中配置跳转路径,该方案会被Identity注册的默认认证方案覆盖,配置不生效。
  • 配置完成后可直接访问带[Authorize]标记的AgentController动作,验证未登录时是否自动跳转到自定义的登录地址。

内容的提问来源于stack exchange,提问作者Cody Popham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.01 23:24:08