L'autenticazione basata sui cookie è, per qualsiasi applicazione web, la soluzione primaria per ovviare alla natura stateless del protocollo HTTP e consentire ad un utente di restare autenticato attraverso le varie richieste di pagina.
Anche ASP.NET Identity usa questo stesso meccanismo ma, a differenza della tradizionale Forms Authentication, introduce delle differenze importanti di cui dovremmo tener conto:
- L'autenticazione cookieless non è più supportata poiché considerata non sicura (http://aspit.co/a2c), anche se il nostro sito web è protetto da certificato SSL;
- In aggiunta all'autenticazione con account locale, ASP.NET Identity supporta anche la claim-based authentication, che consente agli utenti di effettuare l'accesso con login providers esterni come Microsoft, Facebook, Twitter o Google.
- La configurazione non avviene più da web.config ma per mezzo di un oggetto di tipo CookieAuthenticationOptions.
Andiamo ad esaminare la configurazione nel dettaglio.
Seguendo il template di Visual Studio 2013, sia esso per ASP.NET WebForms o per ASP.NET MVC 5, troveremo un file denominato Startup.Auth.cs nella cartella App_Start.
La configurazione si troverà all'interno del metodo ConfigureAuth della classe Startup.
app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new PathString("/Account/Login"), Provider = new CookieAuthenticationProvider { OnValidateIdentity = SecurityStampValidator .OnValidateIdentity<ApplicationUserManager, ApplicationUser>( validateInterval: TimeSpan.FromMinutes(30), regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) } });
Con il metodo di estensione UseCookieAuthentication, aggiungiamo un'istanza di CookieAuthenticationMiddleware alla nostra pipeline OWIN (http://aspit.co/ay9). Il middleware si occuperà sia di emettere cookies in risposta al login dell'utente che di rileggere tale cookie in tutte le successive richieste.
Con l'oggetto CookieAuthenticationOptions forniamo una configurazione al middleware. In questo script inizieremo a vedere le proprietà basilari, mentre nel successivo analizzeremo alcune funzionalità avanzate.
Configurare la modalità di autenticazione
- AuthenticationType è una stringa che indica il tipo di autenticazione che intendiamo supportare. Per l'autenticazione con account locale forniremo la costante DefaultAuthenticationTypes.ApplicationCookie.
- AuthenticationMode indica al middleware se deve proattivamente leggere il cookie, validarlo e creare un'identità per la richiesta corrente. Questa opzione ci è necessaria quando la nostra applicazione supporta più tipi di autenticazione (locale, esterna, two-factor). Eleggeremo il tipo principale passando il valore AuthenticationMode.Active.
- Description è di tipo AuthenticationDescription e possiamo usarlo per aggiungere informazioni accessorie che potrebbero servirci nell'applicazione, come ad esempio un titolo o un'icona da mostrare a schermo quando elenchiamo tutte le modalità di autenticazione supportate.
Impostare la scadenza del cookie
- ExpireTimeSpan ci permette di indicare la durata del cookie, espressa con un TimeSpan anziché con il consueto valore in minuti che assegnavamo all'attributo timeout nel configurare la FormsAuthentication da web.config. Il suo valore predefinito è di 14 giorni.
Se vogliamo creare un cookie non persistente, ovvero un cookie senza una scadenza specifica che verrà perciò eliminato alla chiusura del browser, dovremo agire dal metodo PasswordSignIn (o PasswordSignInAsync) del SignInManager, passando un valore false per il parametro isPersistent. Tale metodo viene usato durante il login per verificare la validità delle credenziali dell'utente. - SlidingExpiration indica se la scadenza del cookie va prorogata automaticamente ad ogni richiesta di pagina da parte dell'utente. Il valore di default è true, ma possiamo impostarlo a false per assegnare al cookie una scadenza assoluta e non prorogabile, calcolata al momento della sua emissione.
Ridirezionare l'utente
- LoginPath indica il percorso della nostra pagina di login, a cui l'utente anonimo verrà automaticamente reindirizzato nel caso tentasse di accedere ad una pagina protetta. E' perciò importante assicurarsi che il percorso sia accessibile da utenti anonimi, onde evitare un loop di ridirezioni.
- ReturnUrlParameter permette di personalizzare la chiave querystring per ricordare la pagina protetta di provenienza. Il valore di default è "returnUrl", lo stesso usato anche dalla FormsAuthentication.
- LogoutPath indica il percorso della pagina di logout, da cui invocheremo il metodo AuthenticationManager.SignOut() per disconnettere l'utente. Se nel navigare verso la pagina di logout dovessimo fornire la chiave querystring corrispondente al ReturnUrlParameter, allora si verificherà una ridirezione al percorso indicato. Utile se vogliamo mostrare una pagina di cortesia all'utente che lo inviti a tornare presto.
ASP.NET Identity è estremamente versatile e le possibilità di configurazione non si esauriscono qui. Ne analizzeremo altre nel prossimo script.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Le novità di Angular: i miglioramenti alla CLI
Utilizzare Azure AI Studio per testare i modelli AI
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Ottenere un token di accesso per una GitHub App
Miglioramenti nell'accessibilità con Angular CDK
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Eseguire i worklow di GitHub su runner potenziati
Usare le navigation property in QuickGrid di Blazor
Gestire i dati con Azure Cosmos DB Data Explorer
Utilizzare Azure Cosmos DB con i vettori
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Utilizzare Tailwind CSS all'interno di React: installazione