Quando realizziamo applicazioni web Line of Business (i cosiddetti "gestionali"), è indispensabile disporre di un'interfaccia di amministrazione per creare utenti, abilitarli all'accesso ed assegnare loro dei ruoli.
ASP.NET Identity, di per sé, non mette a disposizione tale interfaccia e non possiamo neanche avvalerci dal tradizionale strumento di amministrazione di un sito ASP.NET perché non più supportato da Visual Studio 2013.
Thinktecture.IdentityManager è un progetto open source (qui i sorgenti: https://github.com/IdentityManager/IdentityManager.AspNetIdentity), attualmente in beta, che supporta l'amministrazione di utenti e ruoli di ASP.NET Identity. Il progetto ci mette a disposizione un'interfaccia grafica e una API facilmente integrabili con applicazioni web basate su ASP.NET WebForms o ASP.NET MVC.
Tra le funzionalità offerte, troviamo la possibilità di abilitare l'accesso all'area amministrativa anche da remoto, mediante login con OAuth. Inoltre, grazie ad un versatile sistema di metadati, è possibile personalizzare le maschere di creazione e modifica dell'utente con campi aggiuntivi.

Il progetto è disponbile come pacchetto NuGet; andiamo dunque a digitare il comando di installazione dalla console gestione pacchetti di Visual Studio:
Install-Package Thinktecture.IdentityManager.AspNetIdentity -Pre
Come ASP.NET Identity, anche Thinktecture.IdentityManager è stato costruito per essere estendibile ed agnostico nei confronti della tecnologia di persistenza usata. Gli stores, ovvero gli specifici oggetti usati per leggere ed aggiornare la base dati, andranno indicati in fase di configurazione.
Nel metodo ConfigureAuth del file /App_Start/Startup.Auth.cs, aggiungiamo una configurazione standard che si avvale di Entity Framework e degli oggetti che Visual Studio 2013 ci mette a disposizione quando creiamo un progetto a partire dal template per applicazioni web ASP.NET.
// Con questa classe factory indichiamo a Thinktecture.IdentityManager // quali oggetti intendiamo usare per la persistenza di ruoli e utenti var factory = new IdentityManagerServiceFactory(); // In questo specifico esempio, usiamo Entity Framework // e perciò registriamo le classi UserStore<TUser> e // RoleStore<TRole> dal namespace Microsoft.AspNet.Identity.EntityFramework factory.IdentityManagerService = new Registration<IIdentityManagerService>( resolver => { var userManager = new UserManager<IdentityUser>(new UserStore<IdentityUser>()); var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>()); return new AspNetIdentityManagerService< IdentityUser, string, IdentityRole, string>(userManager, roleManager); }); // Creiamo l'oggetto di configurazione var managerOptions = new IdentityManagerOptions { // Consentiamo l'accesso solo dalla macchina locale SecurityMode = SecurityMode.LocalMachine, // Potremmo decidere di fare a meno dell'interfaccia grafica, // se volessimo sfruttare la Web API sottostante, esposta // su /identitymanager/api DisableUserInterface = false, //Indichiamo la factory creata in precedenza Factory = factory }; // Infine, registriamo il middleware indicando il percorso // da cui desideriamo accedere al pannello di gestione app.Map("/identitymanager", map => { map.UseIdentityManager(managerOptions); });
Le classi usate in questo esempio richiedono l'aggiunta di queste direttive using al file /App_Start/Startup.Auth.cs.
using Thinktecture.IdentityManager; using Thinktecture.IdentityManager.Configuration; using Thinktecture.IdentityManager.AspNetIdentity; using Microsoft.AspNet.Identity.EntityFramework;
Ora non resta che aprire il web.config e aggiungere l'attributo runAllManagedModulesForAllRequests="true" al nodo system.webServer/modules. Questa impostasione è necessaria affinché l'identity manager possa trovare ed accedere alle risorse statiche contenute nel suo assembly.
<system.webServer> <modules runAllManagedModulesForAllRequests="true"> <remove name="FormsAuthentication" /> </modules> </system.webServer>
Dal browser, visitiamo il percorso /identitymanager della nostra applicazione ASP.NET ed iniziamo ad amministrare i nostri utenti.

Anche in questo esempio abbiamo avuto modo di apprezzare come lo sviluppo di applicazioni web si stia spostando da soluzioni monolitiche e standardizzate verso un'approccio più modulare, che non disdegna il riutilizzo di "pacchetti di funzionalità" offerti da terze parti. Tali funzionalità sono spesso rese disponibili attraverso NuGet, affinché siano facilmente integrabili nel nostro progetto.
Per ogni ulteriore necessità, possiamo consultare la wiki di ThinkTecture.IdentityManager che documenta nel dettaglio tutte le opportunità di configurazione.
https://github.com/IdentityManager/IdentityManager/wiki/ASP.NET-Identity-IdentityManagerService
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Gestire progetti NPM in .NET Aspire
Ridurre il reflow ottimizzando il CSS
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Disabilitare le run concorrenti di una pipeline di Azure DevOps
Referenziare un @layer più alto in CSS
Gestire gli accessi con Token su Azure Container Registry
Utilizzare Containers in .NET Aspire
Gestire progetti .NET + React in .NET Aspire
Integrare SQL Server in un progetto .NET Aspire
Rendere le variabili read-only in una pipeline di Azure DevOps
Autenticazione di git tramite Microsoft Entra ID in Azure DevOps
I più letti di oggi
- Community Days 2014 Roma - Roma
- Rilasciata la versione RTW di Entity Framework 4.1
- E' ufficiale: Whidbey e Yukon nel 2005
- Il codice sorgente di .NET Framework 3.5, ASP.NET, WinForms e WPF rilasciato con VS 2008
- C# 8
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare azurite come simulatore di Azure Storage
- Recuperare le subissue e il loro stato di completamento in GitHub
- Creare una libreria CSS universale - Rotazione degli elementi