У меня есть несколько схем аутентификации, чтобы избежать токена, предоставленного моим Identity Server и Azure Active Directory
public void ConfigureServices(IServiceCollection services)
{
//...
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Authority = "https://localhost:5000/";
options.Audience = "api1";
options.Events = new JwtBearerEvents
{
OnTokenValidated = async context =>
{
TokenValidated(context);
},
OnAuthenticationFailed = context =>
{
context.Fail("error");
return Task.CompletedTask;
}
};
})
.AddJwtBearer(AzureADDefaults.BearerAuthenticationScheme, options =>
{
options.Audience = myAudience;
options.Authority = "https://login.microsoftonline.com/" + TenantId;
options.Events = new JwtBearerEvents
{
OnTokenValidated = async context =>
{
TokenValidated(context);
},
OnAuthenticationFailed = context =>
{
context.Fail("error");
return Task.CompletedTask;
}
};
});
}
У меня есть атрибут для авторизации контроллеров API:
public void OnAuthorization(AuthorizationFilterContext context)
{
if (context.Filters.Any(item => item is IAllowAnonymousFilter))
{
return;
}
if (!isAuthorized(context))
{
//...
}
}
Мои проблемы - это своего рода казнь.Если я отправляю запрос с токеном, предоставленным ADD, сначала запрос поступает к первому каналу-носителю и переходит к OnAuthenticationFailed, потому что он не предоставляется IS.Затем для выполнения перейдите к OnAuthorization (), а затем вернитесь ко второму AddJwtBearer и введите OnTokenValidated ().
Мне нужно разрешить второй сценарий аутентификации перед выполнением OnAuthorize атрибута.
Как я могу это сделать?