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
Usare una container image come runner di GitHub Actions
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Usare un KeyedService di default in ASP.NET Core 8
Reactive form tipizzati con FormBuilder in Angular
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Recuperare un elemento inserito nella cache del browser tramite API JavaScript
Creazione di plugin per Tailwind CSS: espandere le Funzionalità del Framework
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Applicare il versioning ai nostri endpoint ASP.NET Core Minimal API
Usare il versioning con i controller di ASP.NET Core Web API
Sfruttare MQTT in cloud e in edge con Azure Event Grid
I più letti di oggi
- Utilizzare Docker Compose con Azure App Service
- Utilizzare QuickGrid di Blazor con Entity Framework
- Modernizzare le applicazioni WPF e Windows Forms con Blazor
- ASP 3 per esempi
- annunciato #netstandard 2.1. .NET Core lo supporterà a partire da #netcore3, così come le prossime versione di #xamarin, #mono e #unity.il supporto per #netfx 4.8, invece, non ci sarà. https://aspit.co/bq2
- Steel Style CheckBox per Silverlight 4.0