#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{}
поверх контроллера