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

问题描述 投票:0回答:1

将网站从.NET Core 2.2迁移到3.1.1之后,我的api端点突然开始尝试将api请求重定向到默认登录页面(/Account/Login?ReturnUrl=,我的任何路由都没有该页面) 。

我的api使用的是JWT承载身份验证方案和JWT挑战方案,但仍然发生了重定向。

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

我终于找到了解决这个问题的方法,但是我不知道为什么它真的有帮助。

最初,我将服务设置为:

services
  .AddIdentity<IdentityUser, IdentityRole>()
  .AddSignInManager()
  .AddEntityFrameworkStores<CleWebToolsIdentityDbContext>();

但是重定向完成了。

最终解决我问题的方法是将它们设置为:

services
  .AddIdentityCore<IdentityUser>()
  .AddRoles<IdentityRole>()
  .AddSignInManager()
  .AddEntityFrameworkStores<CleWebToolsIdentityDbContext>();

有人可以告诉我这是怎么回事吗?

即使挑战方案应为JWT,AddIdentity方法如何导致重定向?

c# authentication .net-core asp.net-core-identity
1个回答
0
投票

这是因为AddIdentity为应用程序本身,外部登录(例如Facebook和Google)和2FA注册了默认的基于Cookie的身份验证方案。如果将services.AddIdentity<IdentityUser, IdentityRole>()放在AddJwtBearer配置下面,它将重置默认架构,为避免这种情况,可以将身份配置放在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的身份验证方案,有关更多详细信息,请参见AddIdentity vs AddIdentityCore。>

© www.soinside.com 2019 - 2024. All rights reserved.