Nello script precedente (http://aspit.co/a2d) abbiamo iniziato ad analizzare le modalità per configurare l'autenticazione basata su cookie in ASP.NET Identity. Come abbiamo già accennato, tutto avviene tramite un metodo contenuto all'interno del file Startup.Auth.cs:
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)) } });
Cerchiamo di capire quali siano le altre possibilità di manovra che abbiamo.
Sfruttare l'estendibilità di ASP.NET Identity
- Provider è la proprietà da valorizzare con un'istanza di ICookieAuthenticationProvider se vogliamo intervenire sulle proprietà del cookie nel momento in cui viene emesso, oppure, di eseguire logica personalizzata all'atto della sua conseguente validazione. Nel template di Visual Studio 2013, troviamo questa proprietà valorizzata con un CookieAuthenticationProvider che sfrutta il SecurityStampValidator per consentire il sign-out remoto di un utente, di cui abbiamo parlato in un precedente script (http://aspit.co/a11).
- SystemClock accetta un ISystemClock che ha il solo scopo di restituire la data/ora UTC corrente. ASP.NET Identity è costruito per essere debolmente accoppiato ad ogni altro componente esterno (il clock di sistema, in questo caso). Questo lo rende estremamente testabile infatti, in ambito di unit testing, con una nostra implementazione di ISystemClock potremmo facilmente simulare il passaggio del tempo e la conseguente scadenza del cookie.
- TicketDataFormat può essere valorizzato con un ISecureDataFormat
per personalizzare la cifratura (e decifratura) del contenuto del cookie. In questo modo siamo potenzialmente in grado di intepretare i cookie emessi da un'altra applicazione, anche non ASP.NET, che usi un proprio algoritmo di crittografia.
Modificare gli attributi del cookie
- CookieDomain indica il dominio di validità del cookie. Tipicamente, un cookie è valido solo all'interno del dominio per il quale è stato emesso ma, se volessimo estenderne la validità ad altri sottodomini che ospitano altre nostre applicazioni, allora potremmo valorizzarlo con la stringa ".nomedominio.ext"
- CookiePath accetta un percorso virtuale, come ad esempio "/App1", usato per restringere la validità del cookie ad una data sottocartella. Utile quando ospitiamo più applicazioni nello stesso dominio, e vogliamo tenere isolati i rispettivi meccanismi di autenticazione.
- CookieHttpOnly di default impostato a true, impedisce che il cookie sia accessibile lato client, per mezzo di codice javascript.
- CookieName contiene il nome con il quale il browser salverà il cookie. Modificare il nome mentre l'applicazione è in produzione vuol dire ignorare tutti i cookie di autenticazione emessi in precedenza e costringere gli utenti ad effettuare di nuovo l'accesso.
- CookieSecure può restringere la validità del cookie alle sole pagine protette da HTTPS. Il valore di default è invece CookieSecureOption.SameAsRequest, che è un'opzione molto versatile perché consente l'emissione del cookie sia quando siamo in fase di sviluppo (su HTTP) che in produzione (idealmente su HTTPS).
Un'ultima nota relativa alla configurazione: come abbiamo visto, usando ASP.NET Identity, la configurazione si sposta dal tradizionale web.config ad un oggetto CookieAuthenticationOptions di cui valorizziamo le proprietà.
Questo potrebbe suggerirci che, ad ogni piccola modifica della configurazione, sia necessario ricompilare e ridistribuire l'applicazione. In realtà, siamo liberi di continuare ad usare il web.config e di leggere le impostazioni da chiavi appSettings predisposte allo scopo. Se lo preferiamo, possiamo scrivere un'apposita configSection personalizzata, in modo da lavorare con un oggetto di configurazione che permette l'accesso ai valori in maniera fortemente tipizzata.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
Selettore CSS :has() e i suoi casi d'uso avanzati
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Migliorare l'organizzazione delle risorse con Azure Policy
Utilizzare Copilot con Azure Cosmos DB
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Creare una libreria CSS universale: Nav menu
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Disabilitare automaticamente un workflow di GitHub (parte 2)
Utilizzare Azure Cosmos DB con i vettori
Ottimizzazione dei block template in Angular 17