我有一个针对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并发出(或刷新)新的身份验证会话?
答案 0 :(得分:0)
解决方案是通过传入身份验证类型为libQt5Multimedia.so
使用正确的构造函数重载。 More information at this github issue。
对于那些对此解决方案感兴趣的人,发生403结果的原因是ClaimIdentity
,其中由于身份验证问题而导致策略无法通过。在github问题帖子中,专门构建的repro没有此功能,而是导致401。