Authorize Attribute не работает в ASP Core 2.2 при размещении поверх контроллера. Мой файл startup.cs настроен следующим образом.
//Add Claims
services.AddScoped<IUserClaimsPrincipalFactory<User>, UserClaimsPrincipalFactory<User, Role>();
//Add Context
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddHttpContextAccessor();
services.AddDbContext<DbContext>();
services.AddIdentity<User, Role>(
config =>
{
config.SignIn.RequireConfirmedEmail = true;
config.User.RequireUniqueEmail = true;
}
)
.AddRoles<Role>()
.AddRoleManager<RoleManager<Role>>()
.AddDefaultUI(UIFramework.Bootstrap3)
.AddDefaultTokenProviders()
.AddClaimsPrincipalFactory<MyUserClaimsPrincipalFactory>()
.AddEntityFrameworkStores<DbContext>();
//Add MVC
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddAuthorization();
services.AddAuthentication();
UserClaimsPrincipalFactory работает должным образом, и я могу получить доступ к утверждениям в представлении через UserManager и отфильтровать ссылки на основе роли в утверждениях.
Но когда я делаю это на контроллере.
[Authorize(Roles = "Administrator")]
[HttpGet]
public async Task<IActionResult> Index()
{
return View();
}
Это не работает, и мне отказывают в доступе, несмотря на наличие необходимых ролей в удостоверении. Это известная ошибка, и кому-нибудь удалось заставить атрибуты роли работать в ASP Core 2.2?