.NET 7 WebAPI集成JwtBearer与IdentityCore时登录重定向问题
ASP.NET Core 7 Web API JWT授权重定向问题解决
问题原因分析
1. 为何忽略Authorization请求头?
AddIdentity默认会注册Cookie认证方案,并将其设为默认认证方案。你后续添加的JWT Bearer认证只是额外方案,未覆盖默认设置,系统优先走Cookie认证逻辑,因此会忽略Authorization头中的JWT令牌。
2. 为何返回登录页重定向而非401?
这是AddIdentity附带的Cookie认证默认行为:当Cookie认证未通过时,系统自动重定向到登录页面(默认路径Account/Login)。而Web API场景需要的是返回401 Unauthorized的JSON响应,而非页面跳转。
解决方案
1. 设定默认认证方案为JWT Bearer
修改认证服务配置,明确将默认的认证和挑战方案设为JWT Bearer:
builder.Services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters() { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidAudience = jwtSetting.ValidAudience, ValidIssuer = jwtSetting.ValidIssuer, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSetting.Secret)) }; });
2. 优化Identity配置(适配无状态API)
如果API不需要Cookie认证,可改用AddIdentityCore替代AddIdentity,更贴合无状态Web API场景:
builder.Services.AddIdentityCore<ApplicationUser>(options => { options.Password.RequiredLength = 10; options.Password.RequireDigit = true; options.User.RequireUniqueEmail = true; }) .AddRoles<ApplicationRole>() .AddEntityFrameworkStores<ZhuPalDbContext>() .AddDefaultTokenProviders();
AddIdentityCore仅提供Identity核心功能,不会自动添加Cookie认证相关配置,避免不必要的重定向逻辑。
3. 保持中间件顺序正确
当前中间件顺序UseHttpsRedirection → UseAuthentication → UseAuthorization → MapControllers是正确的,认证中间件必须在授权中间件之前执行,确保请求先完成身份验证再进行授权判断。
4. 验证JWT令牌有效性
确认登录接口生成的JWT令牌符合配置中的ValidIssuer、ValidAudience和签名密钥要求,并且请求时正确在Authorization头中携带Bearer {token}格式的令牌。
内容的提问来源于stack exchange,提问作者Navid_pdp11
相关产品推荐
相关产品推荐

