У нас есть шлюз (реализованный с использованием Ocelot), который выполняет как аутентификацию, так и авторизацию вызовов до того, как он достигнет API.
Для аутентификации шлюз использует JwtBearer, как показано ниже
services.AddAuthentication(Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Events = JwtBeaerEvents();
options.TokenValidationParameters = TokenValidationParameters(tokenConfig);
});
И это правильно проверяет токен.
Помимо этого, шлюз реализован с пользовательской авторизацией, в которую он считывает настройки, связанные с разрешениями, с помощью пользовательского файла конфигурации.И эта пользовательская авторизация добавляется в качестве промежуточного программного обеспечения
. Мы пытаемся добавить это промежуточное программное обеспечение авторизации после промежуточного программного обеспечения для аутентификации, например
app.UseAuthentication().UseAuthorizationMiddleware();
Это работает для действительного токена.Однако для недопустимого токена, независимо от того, что аутентификация прошла неудачно, вызов также перенаправляется в AuthorizationMiddleware.И, основываясь на этих выводах, похоже, что нам нужно использовать DI, а не промежуточное программное обеспечение.Но нам нужна пользовательская реализация для авторизации, которая принимает разрешения / политику / область действия через файл конфигурации (в шлюзе) вместе со схемой JwtBearer, а не декорирует их в атрибуте API.Может ли кто-нибудь пролить свет на то, как этого добиться?
Ваша помощь очень ценится