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
Gestire il routing HTTP in Azure Container App
Abilitare .NET 10 su Azure App Service e Azure Functions
Integrazione di Copilot in .NET Aspire
Disabilitare le run concorrenti di una pipeline di Azure DevOps
Esporre tool MCP con Azure Functions
Integrare Agenti A2A in Azure API Management
Evitare memory leaks nelle closure JavaScript
Integrare LLM alle nostre applicazioni in .NET con MCP
Documentare i servizi REST con Swagger e OpenAPI con .NET 9
Generare una User Delegation SAS in .NET per Azure Blob Storage
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Arricchire l'interfaccia di .NET Aspire
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Le DirectInk API nella Universal Windows Platform
- Sfruttare una CDN con i bundle di ASP.NET
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Gli oggetti CallOut di Expression Blend 4.0
- Inserire le news di Punto Informatico nel proprio sito


