You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.Net Core配置JWT认证后控制器[Authorize]属性失效问题咨询

问题原因排查及修复方案

核心问题1:中间件执行顺序错误

ASP.NET Core 中间件严格按照注册的先后顺序执行,你当前Configure方法中的中间件顺序存在严重错误:

  • 开头就调用了app.UseMvc(),请求会直接进入MVC处理流程,后续注册的UseAuthentication、UseAuthorization完全不会被触发,自然[Authorize]属性不会生效
  • 认证、授权中间件必须放置在UseRouting之后,端点/ MVC 处理中间件之前才能正常工作

核心问题2:路由配置冲突

你在ConfigureServices中通过services.AddMvc(option => option.EnableEndpointRouting = false)关闭了终结点路由模式,但在Configure中同时使用了app.UseMvc()和app.UseEndpoints()两种路由处理方式,二者冲突导致权限校验逻辑未生效。

修复步骤

1. 修正ConfigureServices中的重复配置

删除重复的AddMvc注册,统一配置:

// 删掉原来的两处AddMvc注册,替换为下面的代码
services.AddControllersWithViews()
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
// 如果你要使用终结点路由就不用加EnableEndpointRouting=false,用传统MVC路由才需要加

2. 修正Configure方法的中间件顺序

调整后正确的中间件顺序如下:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();          
    app.UseSpaStaticFiles();

    app.UseRouting();

    // 认证、授权必须放在UseRouting之后,UseEndpoints之前
    app.UseAuthentication();
    app.UseAuthorization();             

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapHub<CoreHub>("/corehub");
        endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}");
    });

    // SPA中间件放在最后
    app.UseSpa(spa =>
    {          
        spa.Options.SourcePath = "ClientApp";
        if (env.IsDevelopment())
        {
            spa.UseProxyToSpaDevelopmentServer("http://localhost:4200");
        }
    });
}

3. 额外校验项

  • 确认你的控制器类没有标记[AllowAnonymous]属性覆盖了方法上的[Authorize]
  • 确认appsettings.json中的JwtSettings配置节点下的validIssuer、validAudience、securityKey值都不为空
  • 如果你仍然要使用传统MVC路由模式,删除app.UseRouting()和app.UseEndpoints(),把app.UseMvc()放在app.UseAuthorization()之后即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:27:03