Spesso, durante lo sviluppo del nostro sito web ASP.NET Core, o del nostro progetto Web API, abbiamo la necessità di impostare un utente fittizio per ragioni di test. Solitamente questo accade quando lo stack di autenticazione è ancora da sviluppare o da integrare, ma comunque vogliamo verificare che la logica di autorizzazione che regola l'accesso ai nostri controller sia corretta.
Il modo migliore per farlo è creare un ClaimsPrincipal durante le fasi iniziali della richiesta, così che il resto della logica possa rimanere invariata. Un custom middleware da configurare nella classe Startup, pertanto, è esattamente ciò che fa al caso nostro:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseDatabaseErrorPage(); app.Use(async (context, next) => { var claims = new List<Claim>() { new Claim(ClaimTypes.Name, "testUser"), new Claim(ClaimTypes.Role, "Admin") }; var scheme = IdentityConstants.ApplicationScheme; var identity = new ClaimsIdentity(claims, scheme); var principal = new ClaimsPrincipal(identity); context.User = principal; await next(); }); } // .. altro codice qui .. }
Il codice in alto è abbastanza intuitivo. Innanzi tutto, è importante segnalare come il codice venga eseguito solo quando si è in modalità "Development", così che non rischiamo di lasciare aperto un evidente buco di sicurezza una volta che l'applicazione sia stata rilasciata.
Il nostro middleware costruisce innanzi tutto una collezione di Claim per l'utente. Nell'esempio in alto abbiamo impostato Name e Role, ma ovviamente possiamo personalizzare questa collection a piacimento, così da poter testare scenari autorizzativi più complessi.
Il passo successivo è costruire un oggetto ClaimsIdentity. Qui l'aspetto importante da specificare è lo schema di autenticazione. ASP.NET Core, infatti, supporta diversi schema (https://docs.microsoft.com/en-us/aspnet/core/security/authorization/limitingidentitybyscheme), per gestire diverse tecniche di autenticazione contemporaneamente ed è importante che questa variabile sia la medesima della tecnologia che andremo a usare.
Per esempio, nel caso di ASP.NET Identity, lo schema è IdentityConstants.ApplicationScheme, mentre se stessimo usando autenticazione basata su Jwt Token in Web API, avremmo dovuto usare
JwtBearerDefaults.AuthenticationScheme
A questo punto non dobbiamo far altro che costruire il ClaimsPrincipal a partire dall'identity appena creata e impostarlo come utente corrente nel context della richiesta, per poi invocare il prossimo middleware e proseguire l'elaborazione della richiesta.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Blazor PWA e Offline-First
Catturare la telemetria degli eventi di output cache in ASP.NET Core
Impostare il forward degli header in un sito ASP.NET Core dietro a un reverse proxy
Usare gateway dedicati con Azure Cosmos DB per migliorare le prestazioni
Usare ASP.NET Core dev tunnels per testare le applicazioni su internet
Specificare il numero di parentesi graffe nella string interpolation in combinazione con i string literal in C#
Sviluppare applicazioni serverless con Azure Container Apps
Usare Docusaurus per creare un sito di documentazione
Gestire dati sensibili nella configurazione in ASP.NET Core
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Cache policy su route groups di Minimal API in ASP.NET Core 7
I più letti di oggi
- App per Windows Store e Windows Phone Store in Visual Studio 2013
- Windows Phone 8: le novità per gli sviluppatori - seconda parte
- Metro Style App per Windows 8 con HTML e Javascript
- Consumare un endpoint generico in Blazor
- Abilitare il Session State su SQL Server
- più di 200 partecipanti a #aspilive: e tu cosa aspetti a scoprire tutte le novità per lo sviluppo web? https://aspit.co/vs12-live
- #VS2012 Update 2 CTP 2 con supporto a #GIT, bug fixing, #blend per #wpf, #silverlight, #sketchflow https://aspit.co/aii
- #MIX10: release candidate disponibile per Silverlight 4 - Beta di Expressioin Blend 4
- Il progetto Roslyn è open source da oggi! roslyn.codeplex.com https://aspit.co/build-14 #bldwin
- Sottoscrizione agli eventi sul contenitore in #javascript https://aspit.co/cfs di @morwalpiz