Condividi tramite


Configurare Condivisione di risorse tra le origini (CORS)

SI APPLICA A: NoSQL

Cross-Origin Resource Sharing (CORS) è 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 criterio di corrispondenza dell'origine, che impedisce a una pagina Webdi chiamare API in un dominio diverso. CORS offre tuttavia una modalità sicura 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 di risorse tra origini usando l'intestazione "allowedOrigins". Dopo l'attivazione del supporto di 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 sia negli ambienti Node.js che in quelli basati su browser. Ora questa libreria può sfruttare i vantaggi del supporto CORS quando si usa la modalità Gateway. Non è necessaria nessuna configurazione lato client per l'uso di 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 di CORS è applicabile e supportato solo per Azure Cosmos DB for NoSQL. Non è applicabile alle API di Azure Cosmos DB per Cassandra, Gremlin o MongoDB, perché questi protocolli non usano HTTP per le comunicazioni client-server.

Abilitare il supporto di CORS dal portale di Azure

Seguire questa procedura per abilitare Condivisione di risorse tra le origini usando il 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, quindi 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 un modello che crea un nuovo account Azure Cosmos DB con la funzionalità CORS abilitata.

{
  "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 esempio illustra un file di configurazione webpack con le impostazioni di simulazione 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 SDK di Azure Cosmos DB. L'esempio compila un'app Todo che invia aggiornamenti in tempo reale quando vengono creati nuovi elementi.

Come procedura consigliata, evitare l'uso della 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 informazioni su altri modi per proteggere l'account Azure Cosmos DB, vedere gli articoli seguenti: