Configurare Condivisione di risorse tra le origini (CORS)

SI APPLICA A: NoSQL

Condivisione risorse tra le origini (CORS, Cross Origin Resource Sharing) è una funzionalità HTTP che consente a un'applicazione Web in esecuzione in un dominio di accedere alle risorse in un altro dominio. I Web browser implementano una limitazione di sicurezza nota come criteri di corrispondenza dell'origine, che impedisce a una pagina Web di chiamare API in un dominio diverso. CorS offre tuttavia un modo sicuro per consentire al dominio di origine di chiamare le API in un altro dominio. L'API per NoSQL in Azure Cosmos DB supporta ora la condivisione delle risorse tra origini usando l'intestazione "allowedOrigins". Dopo aver abilitato il supporto CORS per l'account Azure Cosmos DB, vengono valutate solo le richieste autenticate per determinare se sono consentite in base alle regole specificate.

È possibile configurare l'impostazione Condivisione risorse tra le origini (CORS) dal portale di Azure o da un modello di Azure Resource Manager. Per gli account Azure Cosmos DB che usano l'API per NoSQL, Azure Cosmos DB supporta una libreria JavaScript che funziona in ambienti basati su browser e Node.js. Ora questa libreria può sfruttare i vantaggi del supporto CORS quando si usa la modalità Gateway. Non è necessaria alcuna configurazione lato client per usare questa funzionalità. Grazie al supporto di CORS, le risorse di un browser possono accedere direttamente ad Azure Cosmos DB tramite la libreria JavaScript o direttamente dall'API REST per operazioni semplici.

Nota

Il supporto CORS è applicabile e supportato solo per Azure Cosmos DB per NoSQL. Non è applicabile alle API di Azure Cosmos DB per Cassandra, Gremlin o MongoDB, poiché questi protocolli non usano HTTP per la comunicazione del server client.

Abilitare il supporto di CORS dal portale di Azure

Seguire questa procedura per abilitare la condivisione di risorse tra origini usando portale di Azure:

  1. Passare all'account Azure Cosmos DB. Aprire la pagina CORS .

  2. Specificare un elenco separato da virgole di origini che potranno effettuare chiamate multiorigine all'account Azure Cosmos DB. Ad esempio https://www.mydomain.com, https://mydomain.com, https://api.mydomain.com. È anche possibile usare un carattere jolly "*" per consentire tutte le origini e selezionare Invia.

    Nota

    Attualmente non è possibile usare i caratteri jolly come parte del nome di dominio. Ad esempio il formato https://*.mydomain.net non è ancora supportato.

    Abilitare la condivisione di risorse multiorigine usando il portale di Azure

Abilitare il supporto di CORS dal modello di Resource Manager

Per abilitare CORS usando un modello di Resource Manager, aggiungere la sezione "cors" con la proprietà "allowedOrigins" ai modelli esistenti. Questo codice JSON è un esempio di modello che crea un nuovo account Azure Cosmos DB con CORS abilitato.

{
  "type": "Microsoft.DocumentDB/databaseAccounts",
  "name": "[variables('accountName')]",
  "apiVersion": "2019-08-01",
  "location": "[parameters('location')]",
  "kind": "GlobalDocumentDB",
  "properties": {
    "consistencyPolicy": "[variables('consistencyPolicy')[parameters('defaultConsistencyLevel')]]",
    "locations": "[variables('locations')]",
    "databaseAccountOfferType": "Standard",
    "cors": [
      {
        "allowedOrigins": "https://contoso.com"
      }
    ]
  }
}

Uso della libreria JavaScript Azure Cosmos DB da un browser

Attualmente il pacchetto della libreria JavaScript di Azure Cosmos DB include solo la versione CommonJS. Per usare questa libreria dal browser è necessario usare uno strumento come Rollup o Webpack per creare una libreria compatibile con il browser. Per alcune librerie Node.js sono disponibili simulazioni di browser. Questo è un esempio di un file di configurazione webpack con le impostazioni fittizie necessarie.

const path = require("path");

module.exports = {
  entry: "./src/index.ts",
  devtool: "inline-source-map",
  node: {
    net: "mock",
    tls: "mock"
  },
  output: {
    filename: "bundle.js",
    path: path.resolve(__dirname, "dist")
  }
};

Ecco un esempio di codice che usa TypeScript e Webpack con la libreria JavaScript JavaScript di Azure Cosmos DB. L'esempio compila un'app Todo che invia aggiornamenti in tempo reale quando vengono creati nuovi elementi.

Come procedura consigliata, non usare la chiave primaria per comunicare con Azure Cosmos DB dal browser. Per le comunicazioni, usare invece i token delle risorse. Per altre informazioni sui token delle risorse, vedere l'articolo Protezione dell'accesso ai dati in Azure Cosmos DB.

Passaggi successivi

Per altre informazioni su altri modi per proteggere l'account Azure Cosmos DB, vedere gli articoli seguenti: