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
Estrarre dati randomici da una lista di oggetti in C#
.NET Conference Italia 2024
Gestione CSS in Blazor con .NET 9
Ottimizzazione dei block template in Angular 17
Referenziare un @layer più alto in CSS
Generare la software bill of material (SBOM) in GitHub
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Eseguire query in contemporanea con EF
Gestione dei nomi con le regole @layer in CSS
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API