API Management è un servizio PaaS della piattaforma Microsoft Azure che permette fornire e amministrare API web, tipicamente REST. Dispone di molte funzionalità, come il routing, la possibilità di fare mock e di proteggere le chiamate oppure di fare cache delle risposte.
In quanto API, molto spesso esse vengono interrogate da un client web, perciò sottoposte ai controlli di sicurezza dei browser. Per evitare che del codice malevolo facce chiamate a host non autorizzati, i browser effettuano una chiamata di controllo all'endpoint e controllano la presenza di header di nome Access-Control-Allow-* per indicare quali domini, header e metodi sono consentiti. Queste informazioni che prendono il nome di Cross-Origin Resource Sharing (CORS) possono essere restituite direttamente dal backend, oppure, cosa più vantaggiosa, direttamente dalle API Management indipendentemente dai servizi sottostanti.
Posizioniamoci quindi dal portale sulle policy di nostro interesse che sono accessibili attraverso il prodotto e selezioniamo dalla lista la voce CORS.

Nell'XML dobbiamo definire gli aspetti di inbound e di outbound. Prendiamo come esempio questa policy.
<policies> <inbound> <base /> <cors allow-credentials="true"> <allowed-origins> <origin>http://website1.com</origin> <origin>http://website2.com</origin> </allowed-origins> <allowed-methods> <method>GET</method> </allowed-methods> <allowed-headers> <header>content-type</header> <header>accept</header> </allowed-headers> </cors> </inbound> <backend> <base /> </backend> <outbound> <base /> <set-header name="Access-Control-Allow-Origin" exists-action="override"> <value>*</value> </set-header> <set-header name="Access-Control-Allow-Credentials" exists-action="override"> <value>true</value> </set-header> </outbound> <on-error> <base /> </on-error> </policies>
Essa definisce:
- La possibilità di inviare token autorizzativi;
- La lista dei domini nella quale risiede il client dai quali è possibile effettuare una richiesta;
- I metodi HTTP consentiti;
- Gli header HTTP consentiti. Quest'ultimi sono molto importanti e possono essere molteplici a seconda del framework che stiamo utilizzando;
- Gli header da impostare in uscita riproponendo lo stesso dominio di origine e consentendo l'invio delle credenziali.
Salvata la policy possiamo provare con tool come cURL o Fiddler ad effettuare una richiesta OPTIONS e vedere gli header in risposta per avere la certezza di quello che abbiamo fatto. Qualora ricevessimo degli errori dai browser, è opportuno controllare nella richiesta quali valori vengono mandati per gli header Access-Control-Request-* ed intervenire per allinearli a quanto abbiamo specificato nelle policy.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare i nuovi piani dedicati di Azure Container Apps
Mascherare l'output di un valore all'interno dei log di un workflow di GitHub
Usare ASP.NET Core dev tunnels per testare le applicazioni su internet
Usare gateway dedicati con Azure Cosmos DB per migliorare le prestazioni
Eseguire attività pianificate con Azure Container Jobs
Sfruttare i tag nell'output cache di ASP.NET Core 7
Limitare lo spazio dei repository di Azure Container Registry con uno script bash e Azure CLI
Gestire tipi complessi in query string grazie a IParsable in ASP.NET Core 7.0
Implementare il throttling in ASP.NET Core
Utilizzare flat e flatMap per appiattire array innestati in array
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Condividere i workflow tra più repository in GitHub
I più letti di oggi
- .NET Conference Italia 2023 - Milano e Online
- Utilizzare database e servizi con gli add-on di Container App
- Evitare la script injection nelle GitHub Actions
- Reactive form tipizzati con modellazione del FormBuilder in Angular
- Eseguire attività basate su eventi con Azure Container Jobs
- Utilizzare le collection expression in C#
- Registrare servizi multipli tramite chiavi in ASP.NET Core 8
- Eseguire query verso tipi non mappati in Entity Framework Core
- Reactive form tipizzati con FormBuilder in Angular
- Eseguire attività pianificate con Azure Container Jobs