ASP.NET MVC possiede un filtro, stiamo parlando di RequireHttps, che ci permette di indicare quali controller o action richiedano una connessione SSL. L'effetto è che, in presenza di una connessione non protetta, la richiesta viene automaticamente ridirezionata sul protocollo HTTPS.
Tipicamente, però, ci sono intere aree di un sito che vanno protette tramite SSL: pensiamo, per esempio, all'intera gestione del carrello, dei pagamenti, o dell'account utente.
Con una semplice modifica, possiamo creare un filtro ereditato da RequireHttps, che però applichi la logica a una specifica area:
public class HttpsAreaFilter : RequireHttpsAttribute { public string AreaName { get; set; } public HttpsAreaFilter(string areaName) { this.AreaName = areaName; } protected override void HandleNonHttpsRequest( AuthorizationContext filterContext) { var requestArea = filterContext.RouteData .DataTokens["area"] as string ?? string.Empty; if (string.Equals(requestArea, this.AreaName, StringComparison.InvariantCultureIgnoreCase)) base.HandleNonHttpsRequest(filterContext); } }
Il metodo di cui abbimo effettuato l'override, ossia HandleNonHttpsRequest, viene chiamato dalla classe base tutte le volte che viene rilevata una connessione non protetta. A questo punto non dobbiamo far altro che verificare se la richiesta appartenga all'area indicata; in caso affermativo invochiamo la versione base del metodo, che effettuerà il redirect della richiesta su protocollo HTTPS.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Reactive form tipizzati con FormBuilder in Angular
Effettuare delete massive con Entity Framework Core 7
Evitare il flickering dei componenti nel prerender di Blazor 8
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Catturare la telemetria degli eventi di output cache in ASP.NET Core
Implementare il throttling in ASP.NET Core
Effettuare chiamate con versioning da Blazor ad ASP.NET Core
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
Short-circuiting della Pipeline in ASP.NET Core
Evitare la script injection nelle GitHub Actions
Sfruttare lo streaming di una chiamata Http da Blazor
Load test di ASP.NET Core con k6