Nello scorso script (https://www.aspitalia.com/script/1282/Usare-AntiForgeryToken-Scenario-Web-Farm-ASP.NET-Core-MVC.aspx) abbiamo visto come, in un contesto di webfarm, AntiForgeryToken necessita di uno storage per le chiavi di decodifica che sia condiviso tra tutti i server.
Le due alternative che abbiamo presentato sono una share di rete o Azure Blob Storage. Una terza opzione è quella di usare Redis cache. Solitamente è quella preferibile, perchè in un contesto di web farm è molto comune che ci sia già a disposizione un server di cache distribuita. Il primo passo è quello di installare il provider di DataProtection per Redis:
Install-Package Microsoft.AspNetCore.DataProtection.Redis
A questo punto, avremo a disposizione un nuovo extension method, PersistKeysToRedis che possiamo usare come nell'esempio in basso:
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); // .. altro codice qui .. var redis = ConnectionMultiplexer.Connect(Configuration.GetSection("cache").GetValue<string>("redis")); services.AddDataProtection() .SetApplicationName("my-application") .PersistKeysToRedis(redis); }
Come prima cosa, creiamo una connessione a Redis tramite la classe ConnectionMultiplexer; nel nostro esempio, stiamo recuperando la stringa di connessione dalla configurazione. Successivamente non dobbiamo far altro che passare questo oggetto al metodo PersistKeysToRedis. Eventualmente, esiste anche un overload che permette di indicare quale chiave utilizzare in Redis.
Una nota importante riguarda il fatto che il server di cache distribuita deve essere disponibile all'avvio dell'applicazione, altrimenti lo snippet in alto genererà un'eccezione. Dovremo pertanto tenerne conto in fase di deploy.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Supportare la sessione affinity di Azure App Service con Application Gateway
Creare una libreria CSS universale: Immagini
Conoscere il rendering Server o WebAssembly a runtime in Blazor
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Utilizzare Container Queries nominali
Utilizzare QuickGrid di Blazor con Entity Framework
Escludere alcuni file da GitHub Secret Scanning
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
I più letti di oggi
- Community Night@Basta!Italia on tour 2009 - Milano
- Real Code Day - Firenze
- Real Code Conference 4.0 - Firenze
- Windows Phone r8me - Roma
- Visual Studio 2008 Team Suite in RTM su MSDN Download
- Rilasciata la prima CTP del .NET Parallel Framework
- Annunciata la modalità di uscita di ADO.NET Entity Framework e dei Data Services