35 messaggi dal 30 gennaio 2014
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

Valter
35 messaggi dal 30 gennaio 2014
Ho risolto da solo.
Nel CustomClaimsPrincipalFactory.cs non implementavo IdentityRole in questo modo:


  public class CustomClaimsPrincipalFactory : UserClaimsPrincipalFactory<ApplicationUser, IdentityRole>
  {
      public CustomClaimsPrincipalFactory(UserManager<ApplicationUser> userManager, RoleManager<IdentityRole> roleManager, IOptions<IdentityOptions> optionsAccessor) : base(userManager, roleManager, optionsAccessor)

...



Funzionava tutto lo stesso, ma aggiunte le Authorize (anche se era un ruolo "user") ritornava sempre la pagina AccessDenied....

Valter

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.