Il Cross-Origin Resource Sharing (CORS) è una caratteristica di HTTP che permette a soluzioni web di supportare scenari cross dominio. Nelle nostre pagine HTML, infatti, non è possibile per motivi di sicurezza effettuare richieste su indirizzi diversi dal dominio corrente. Negli scenari moderni però, è sempre più frequente la necessità di dover chiamare API su un dominio diverso, nostro o di terze parti.
Per supportare questi scenari, lo standard CORS prevede che il client possa effettuare una chiamata di tipo OPTIONS all'indirizzo sui cui andrà effettuata la chiamata e da quest'ultimo ottenere informazioni quali i domini chiamanti consentiti, i metodi HTTP, gli header HTTP e la durata totale della cache.
Questo meccanismo risulta utile quando utilizziamo i servizi di Azure Storage, soprattutto quando sfruttiamo le Shared Access Signature per permettere direttamente al client di salvare Blob, Table o Queue, e sfruttare al massimo la scalabilità. Normalmente i servizi sono esposti sotto il dominio xxx.core.windows.net e questo ci impedirebbe di effettuare chiamate da JavaScript, per esempio. Possiamo però istruire i servizi di Azure Storage affinché rispondano alle richieste CORS con i domini da noi consentiti.
Per farlo possiamo usare come al solito le REST API o le client library per .NET. In questo script usiamo quest'ultime che attraverso i metodi GetServiceProperties e SetServiceProperties permettono di impostare le CorsRule, come nell'esempio.
var p = client.GetServiceProperties(); p.Cors = new CorsProperties(); p.Cors.CorsRules.Add(new CorsRule() { AllowedOrigins = new List<string>() { "miodominio.it" }, AllowedHeaders = new List<string>() { "*" }, // qualsiasi AllowedMethods = CorsHttpMethods.Get | CorsHttpMethods.Head | CorsHttpMethods.Post, ExposedHeaders = new List<string>() { "*" }, // qualsiasi MaxAgeInSeconds = 1800 // 30 minuti }); client.SetServiceProperties(p);
Oltre a specificare esattamente i parametri possiamo utilizzare la wildcard per accettare qualsiasi valore, ma sconsigliamo tale utilizzo al fine di poter essere mirati ed evitare attacchi remoti da domini di cui non ci fidiamo. Infine, sono consentiti fino ad un massimo di cinque regole e, una volta impostate, hanno effetto subito.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Effettuare l'upload di un file da Blazor su Azure Blob Storage
Accedere da un App Service ad Azure SQL Database tramite AAD
Utilizzare le annotazioni nei metadati di Entity Framework Core per marcare campi come non modificabili
Utilizzare il Nullish Coalescing con TypeScript
Modificare il layout della paginazione del controllo CarouselView in Xamarin Forms
Welcome to #GlobalAzure
Gestire un observable quando la finestra del browser non è attiva in Angular
Tra pochi minuti inizia #aspilive Re|Build 2020!Seguici comodamente: tutte le novità per lo sviluppo di casa Microsoft: C# 9, #net5, #azure, #maui, #blazor, #VSCode, #WSL2 e tanto altro! Iscrizioni e live dalle 14 su https://aspit.co/ReBuild-20
Utilizzare Live metrics con le Azure Functions
Estensioni personalizzate per le pipeline di Azure DevOps e GitHub con .NET 5
Ricevere notifiche push sull'app con Azure Monitor
Personalizzare gli elementi del controllo SwipeView in Xamarin Forms
I più letti di oggi
- .NET Conference Italia 2020 - Online
- Mantenere sempre attivo lo schermo con Windows Phone 7
- .NET Conference Italia 2019 Live - Milano
- Ecco l'SDK per Windows 7
- Mono 0.12: verso una nuova implementazione di ASP.NET
- Update NoDo di marzo 2011 di Windows Phone in fase di distribuzione
- Rilasciato anche ASP.NET V1
- ASP.NET Starter Kit in italiano
- Patch ADODB.Stream for Internet Explorer