Buonasera.
Chiedo lumi a chi è più esperto di me.
Su una piccola web app che ho sviluppato per la gestione di alcune incombenze d'ufficio ho riscontrato un piccolo problema quando all'action del controller aggiungo
[Authorize(Roles = "Administrator")]
nel senso che, pur avendo il ruolo (se eseguo
userManager.IsInRoleAsync(utente, "Administrator");
mi da esito true, mentre se cerco di aprire la pagina a cui ho attribuito Authorize mi da accesso negato.
allego parte del file program.cs:
...
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found.");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlite(connectionString));
builder.Services.AddMvc(opt =>
{
AuthorizationPolicyBuilder policyBuilder = new();
AuthorizationPolicy policy = policyBuilder.RequireAuthenticatedUser().Build();
AuthorizeFilter filter = new(policy);
opt.Filters.Add(filter);
});
builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages();
builder.Services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
}).AddCookie(opt =>
{
opt.ExpireTimeSpan = TimeSpan.FromMinutes(60);
opt.Cookie.MaxAge = opt.ExpireTimeSpan;
opt.SlidingExpiration = true;
});
builder.Services.AddIdentity<ApplicationUser, IdentityRole>(options =>
{
options.Password.RequiredLength = 8;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireDigit = true;
options.Password.RequireLowercase = false;
// Conferma dell'account
options.SignIn.RequireConfirmedAccount = false;
// Blocco dell'account
options.Lockout.AllowedForNewUsers = true;
options.Lockout.MaxFailedAccessAttempts = 10;
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
})
.AddRoleManager<RoleManager<IdentityRole>>()
.AddDefaultUI()
.AddClaimsPrincipalFactory<CustomClaimsPrincipalFactory>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddSignInManager()
.AddDefaultTokenProviders();
...
Ringrazio in anticipo ogni contributo