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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:47:24