Una delle innovazioni più interessanti in ASP.NET Core è il concetto di Policy per quanto riguarda la gestione delle autorizzazioni.
Nelle versioni precedenti, quando dovevamo controllare l'accesso a particolari controller o action, l'unico strumento che avevamo a disposizione per differenziare gli utenti era il Role: una certa pagina o una certa API poteva essere ristretta solo agli appartenenti a un determinato gruppo.
Questo approccio aveva fondamentalmente due problemi:
- il Role era l'unico discriminante built-in che potevamo utilizzare. Regole più complesse potevano solo essere soddisfatte tramite custom authorization attribute;
- se il nome del ruolo veniva modificato, era necessario andare a sostituirlo in tutte le pagine o aree in cui era stato utilizzato.
Con l'avvento della security basata su Claim, invece, abbiamo a disposizione tutta una serie di attributi in più (i claim, per l'appunto) che descrivono l'utente in maniera più dettagliata, e permettono quindi di gestire regole più complesse, come per esempio richiedere multi-factor authentication per accedere all'area admin del sito.
Una policy non è altro che una sequenza di regole che viene dichiarata all'interno della classe startup:
public void ConfigureServices(IServiceCollection services) { // .. altro codice qui .. services.AddMvc() .SetCompatibilityVersion(CompatibilityVersion.Version_2_1); services.AddAuthorization(options => { options.AddPolicy("AdminOnly", policy => { policy.RequireRole("Admin"); }); }); }
Nell'esempio in alto, abbiamo creato una semplice policy chiamata AdminOnly che richiede che l'utente appartenga al ruolo Admin.
In un controller o in una action, possiamo poi referenziare la policy in alto tramite il solito attributo Authorize:
[Authorize(Policy = "AdminOnly")] public IActionResult About() { // .. altro codice qui .. }
Le policy possono richiedere la presenza di determinati claim, possono implementare regole autorizzative complesse e persino essere combinate tra loro.
In ogni modo, anche usarle solo per specificare un semplice requisito di ruolo ci permette di astrarre la regola autorizzativa dal requisito in possesso dell'utente: se il nome del gruppo dovesse cambiare, o la regola dovesse diventare più complessa, ci basterà modificare la policy senza dover toccare i singoli controller o action dove è applicata.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Short-circuiting della Pipeline in ASP.NET Core
Sfruttare i KeyedService in un'applicazione Blazor in .NET 8
Applicare il versioning ai nostri endpoint ASP.NET Core Minimal API
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Eseguire le GitHub Actions offline
Implementare il throttling in ASP.NET Core
Eseguire operazioni con timeout in React
Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
Configurare dependabot per aggiornare le dipendenze di terze parti con GitHub Actions
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Hosting di componenti WebAssembly in un'applicazione Blazor static
Evitare il flickering dei componenti nel prerender di Blazor 8
I più letti di oggi
- Impostare un elemento come ridimensionabile tramite CSS
- Proteggersi dagli attacchi di Open Redirect in ASP.NET Core MVC
- Personalizzare l'errore del rate limiting middleware in ASP.NET Core
- Accedere alla console di una Azure Container App
- Modificare i metadati nell'head dell'HTML di una Blazor Web App
- Gli oggetti CallOut di Expression Blend 4.0
- SQL Server 2005 December CTP
- Sfruttare le nuove tipologie di input di HTML5 con ASP.NET 4.0
- Upload da una pagina web con Dundas Upload