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

ASP.NET Core 6 MVC添加JwtBearer认证后SignInManager失效问题

问题原因与解决方案

核心问题

你遇到的问题是默认认证方案冲突导致的:

  • ASP.NET Core Identity的SignInManager默认依赖Cookie认证方案(IdentityConstants.ApplicationScheme),登录后会在客户端写入身份Cookie。
  • 当你把默认认证方案设为JwtBearerDefaults.AuthenticationScheme后,系统会默认用JWT方案验证所有带[Authorize]标记的接口,同时User.Identity会优先尝试从JWT Token解析身份——但当前请求只有Cookie凭证、没有JWT Token,自然会导致身份识别失败,进而出现SignInManager失效、接口验证报错的情况。

解决方案

结合你的MVC+Identity场景,需要同时支持Cookie认证(供页面登录、SignInManager使用)和JWT认证(若有API需求),可按以下方式调整配置:

1. 修正认证方案默认设置

在Program.cs中,明确将默认认证、挑战方案设为Identity的Cookie方案,同时保留JWT认证配置(注意注册顺序,Identity服务要在认证配置之前):

// 先注册Identity服务
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();

// 配置认证系统
builder.Services.AddAuthentication(options =>
{
    // 设置默认认证、挑战方案为Identity的Cookie方案
    options.DefaultAuthenticateScheme = IdentityConstants.ApplicationScheme;
    options.DefaultChallengeScheme = IdentityConstants.ApplicationScheme;
})
// 添加JWT认证方案
.AddJwtBearer(options =>
{
    options.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuer = true,
        ValidateAudience = true,
        ValidateLifetime = true,
        ValidateIssuerSigningKey = true,
        ValidIssuer = builder.Configuration["Jwt:Issuer"],
        ValidAudience = builder.Configuration["Jwt:Audience"],
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
    };
});

2. 给特定接口指定JWT认证方案

如果项目中有API接口需要用JWT验证,直接在[Authorize]特性中指定JWT方案即可,不会影响MVC页面的Cookie认证:

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public IActionResult ApiAdmin()
{
    // API业务逻辑
}

额外说明

如果你的项目其实不需要JWT认证,只是误加了相关配置,直接移除AddJwtBearer和默认方案设置就能回到原本的正常状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:01:20