【问题标题】:ASP.NET Core 3.1.1 Jwt redirects instead of returning http status 401 after migration from ASP.NET Core 2.2从 ASP.NET Core 2.2 迁移后,ASP.NET Core 3.1.1 Jwt 重定向而不是返回 http 状态 401
【发布时间】:2020-03-18 15:37:00
【问题描述】:

在将我的网站从 .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】:

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

    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

    【讨论】:

    • 谢谢!我真的希望对哪种扩展方法注册了哪些服务有某种概述。有时可能很难跟踪,尤其是在更新到较新版本之后。
    猜你喜欢
    • 2020-05-27
    • 1970-01-01
    • 2021-11-01
    • 2021-10-14
    • 1970-01-01
    • 2015-08-05
    • 2020-04-06
    • 2019-06-05
    • 2018-01-09
    相关资源
    最近更新 更多