且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

从ASP.NET Core 2.2迁移后,ASP.NET Core 3.1.1 Jwt重定向而不是返回HTTP状态401

更新时间:2023-02-15 08:50:58

这是因为 AddIdentity 为应用程序本身,外部登录(例如Facebook和Google)注册了默认的基于Cookie的身份验证方案)和2FA.如果将 services.AddIdentity< IdentityUser,IdentityRole>()放在 AddJwtBearer 配置下面,它将重置默认架构,要避免这种情况,可以将Identity配置放在jwt承载配置:

That is because AddIdentity registers the default Cookie-based authentication schemes for the application itself, external sign-in (e.g. Facebook and Google), and 2FA . It will reset the default schema if you put services.AddIdentity<IdentityUser, IdentityRole>() below the AddJwtBearer config , to avoid this , you can put the identity config above the jwt bearer config :

services
.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders().AddDefaultUI();

services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
  ....

});

使用 AddIdentityCore 之所以有效,是因为它不会注册默认的基于Cookie的身份验证方案,请参见

Use AddIdentityCore works because it won't registers the default Cookie-based authentication schemes , see AddIdentity vs AddIdentityCore for more details.