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
Creare moduli CSS in React
Short-circuiting della Pipeline in ASP.NET Core
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Utilizzare gli snapshot con Azure File shares
Gestire errori funzionali tramite exception in ASP.NET Core Web API
Ottenere il contenuto di una cartella FTP con la libreria FluentFTP
Configurare policy CORS in Azure Container Apps
Trasformare qualsiasi backend in un servizio GraphQL con Azure API Management
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Eseguire query verso tipi non mappati in Entity Framework Core
Eseguire attività con Azure Container Jobs
Disabilitare automaticamente un workflow di GitHub (parte 2)
I più letti di oggi
- Riordinare le righe di una GridView di ASP.NET con jQuery
- Creazione di un alarm con suono personalizzato con Windows Phone 7.1
- Utilizzare la session affinity con Azure Container Apps
- Blue-green deployment con Azure Web App e DevOps
- Ed infine anche il calendario :)
- Configurare la diagnostica di Azure attraverso Visual Studio
- Recuperare la data di creazione di un tag tramite una pipeline YAML di Azure DevOps
- Microsoft Security Bulletin MS05-002
- .NET Core e dispositivi IoT
- Eseguire attività pianificate con Azure Container Jobs