Sfruttare Redis come storage per AntiForgeryToken in ASP.NET Core

di Marco De Sanctis, in ASP.NET Core,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi