Il motore di ASP.NET, di default, è in grado di intercettare le richieste solo per le estensioni che gestisce direttamente.
Se si ha bisogno di proteggere con la FormsAuthentication file ZIP o PDF, ad esempio, il meccanismo non entra in azione.
Per ovviare a questo problema è però sufficiente mappare, da IIS, l'estensione desiderata sul motore di ASP.NET (per farlo è sufficiente replicare la configurazione per l'estensione .aspx).
Una volta fatta la modifica, è sufficiente modificare il web.config in modo che vengano definite le policy di accesso alle risorse.
Se i file sono tutti in una directory, il compito è molto più semplice.
Qualora invece si tratti di file sparsi per il disco del server, che hanno in comune l'estensione, il tag location non può esserci utile ed è quindi indispensabile optare per qualcosa di diverso.
In questo caso, la soluzione migliore consiste nell'implmentare un semplice HttpHandler che verifichi, per tutti i file, se la richiesta è autenticata o meno:
using System; using System.Web; namespace ASPItalia.com.Handlers { // handler per un'intera estensione public class ProtectedContentHandler : IHttpHandler { // processa la richiesta corrente public void ProcessRequest(HttpContext ctx) { HttpResponse Response = ctx.Response; HttpRequest Request = ctx.Request; // se non è autenticato, rimando alla pagina di login if (!Request.IsAuthenticated) { Response.StatusCode = 401; Response.End(); } // il contenuto arriva al browser Response.Clear(); Response.ContentType = "application/x-zip-compressed"; Response.WriteFile(Request.Path); } public bool IsReusable { get { return true; } } } }
Nel web.config, andrà poi aggiunto, sotto configuration\system.web, la stessa voce per ogni estensione da gestire:
<httpHandlers> <add verb="*" path="*.zip" type="ASPItalia.com.Handlers.ProtectedContentHandler,handlers" /> <add verb="*" path="*.pdf" type="ASPItalia.com.Handlers.ProtectedContentHandler,handlers" /> </httpHandlers>
Per approfondimenti sugli HttpHandler si veda:
https://www.aspitalia.com/liste/usag/script_ricerca_HttpHandlers.aspx
Sulla FormsAuthentication:
https://www.aspitalia.com/servizi/focus/mostra.aspx?ID=640
Commenti
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
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Eseguire script pre e post esecuzione di un workflow di GitHub
- Creare una libreria CSS universale: Cards
- Migliorare l'organizzazione delle risorse con Azure Policy