Настройка аутентификации IdentityServerJwt с авторизацией

#c# #asp.net-core #asp.net-mvc-3 #asp.net-identity #hangfire

#c# #asp.net-ядро #asp.net-mvc-3 #asp.net-идентификация #hangfire

Вопрос:

У меня есть приложение Blazor webassembly, которое использует дополнительную аутентификацию IdentityServerJwt и работает с Hangfire. Я пытаюсь настроить Hangfire для allow only users who are admins авторизации на основе приведенной здесь статьи, но я получаю No authentication handler is registered for the scheme 'Bearer' сообщение об ошибке. Что я должен добавить в качестве AuthenticationSchemes . JwtBearerDefaults.AuthenticationScheme` не работает.

Чего мне не хватает?

     public partial class Startup
        {
            public Startup(IConfiguration configuration)
            {
                Configuration = configuration;
            }    
            public IConfiguration Configuration { get; }
            string handfirepolicyname="HangfirePolicyName";
            public void ConfigureServices(IServiceCollection services)
            {
...Code removed for brevity
    services.AddAuthentication().AddIdentityServerJwt();
                services.AddAuthorization(options =>
                {
                  options.AddPolicy(handfirepolicyname, builder =>
                  {                    builder.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme).RequireAuthenticatedUser();
                    builder.RequireRole("admin");
                  });
                });        
                var hangfireConnectionstring = "SomeHangfireDatabaseConnectionString";
                var mySqlStorageOptions = new MySqlStorageOptions();
                var mySqlStorage = new MySqlStorage(hangfireConnectionstring, mySqlStorageOptions);
                services.AddHangfire(config => config.UseStorage(mySqlStorage));
                services.AddHangfireServer();
    }        
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ApplicationIdentityDbContext identityDbContext)
            {
...Code removed for brevity
                app.UseIdentityServer();
                app.UseAuthentication();
                app.UseAuthorization();
                //UseAuthentication, UseAuthorization should be before UseHangfireDashboard
                app.UseHangfireDashboard();    
                app.UseEndpoints(endpoints =>
                {
                  endpoints.MapHangfireDashboard("/hangfire", new DashboardOptions()
                  {
                    Authorization = new List<IDashboardAuthorizationFilter> { }
                  }).RequireAuthorization(handfirepolicyname);
                });
    
    }
 

Ошибка:

 No authentication handler is registered for the scheme 'Bearer'. The registered schemes are: Identity.Application, Identity.External, Identity.TwoFactorRememberMe, Identity.TwoFactorUserId, idsrv, idsrv.external, IdentityServerJwt, IdentityServerJwtBearer. Did you forget to call AddAuthentication().Add[SomeAuthHandler]("Bearer",...)?
 

Комментарии:

1. Вы забыли настроить аутентификацию (добавить параметр bearer)? Пожалуйста, обратитесь к ссылке

Ответ №1:

путем добавления

 [Authorize(AuthenticationSchemes = "Bearer")]
public class TestController : ControllerBase{}
 

поверх контроллера