AuthenticationFailedContext.Success()在处理JwtBearerEvents.OnAuthenticationFailed时不起作用

时间:2019-08-09 14:28:38

标签: c# authentication asp.net-core bearer-token

我有一个针对2.2的ASP.NET Core Web API,如果认证请求失败,我将无法处理。身份验证请求需要传递有效的刷新令牌。当JWT过期时,我的代码正在处理失败的事件(我还提供了一个生存期验证器),然后在正确验证了所提供的刷新令牌并因此将其消耗掉时,再发出新的JWT和刷新令牌。但是,无论我的代码在上下文中调用SXRX_df['Exam'] = 'SXRX'如何,管道都不会继续执行,而是返回403。

这是相关的Subject部分:

Success()

失败处理程序:

Startup.cs

在Postman中检查403结果时,我可以在Authorization标头中看到新的JWT,并在cookie中看到新的刷新令牌。它们正确地归因于services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { options.RequireHttpsMetadata = true; options.SaveToken = true; options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Authentication:JwtSecret"])), ValidateIssuer = false, ValidateAudience = false, ValidateLifetime = true, LifetimeValidator = l10n.Api.Code.Auth.Bearer.JwtBearerExtensions.LifetimeValidator }; options.Authority = Configuration["Authentication:JwtAuthority"]; options.ClaimsIssuer = Configuration["Authentication:JwtIssuer"]; options.Events = new JwtBearerEvents(); options.Events.OnAuthenticationFailed = async context => await context.AuthenticationFailed(); }) 对象。只是管道放弃了其余的处理,而我的控制器动作从未被调用。

如何允许请求继续并完成,返回预期的JSON并发出(或刷新)新的身份验证会话?

1 个答案:

答案 0 :(得分:0)

解决方案是通过传入身份验证类型为libQt5Multimedia.so使用正确的构造函数重载。 More information at this github issue

对于那些对此解决方案感兴趣的人,发生403结果的原因是ClaimIdentity,其中由于身份验证问题而导致策略无法通过。在github问题帖子中,专门构建的repro没有此功能,而是导致401。