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
Ottimizzazione dei block template in Angular 17
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API
Escludere alcuni file da GitHub Secret Scanning
Creare gruppi di client per Event Grid MQTT
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Utilizzare Container Queries nominali
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core