Konfigurera resursdelning mellan ursprung (CORS)

GÄLLER FÖR: NoSQL

Resursdelning med flera ursprung (CORS) är en HTTP-funktion som gör att en webbapp som körs under en domän kan komma åt resurser på en annan domän. Webbläsare implementerar en säkerhetsbegränsning som kallas samma ursprungsprincip som hindrar en webbsida från att anropa API:er i en annan domän. CORS är dock ett säkert sätt att tillåta ursprungsdomänen att anropa API:er i en annan domän. API:et för NoSQL i Azure Cosmos DB stöder nu cors (Cross-Origin Resource Sharing) med hjälp av rubriken "allowedOrigins". När du har aktiverat CORS-stödet för ditt Azure Cosmos DB-konto utvärderas endast autentiserade begäranden för att avgöra om de tillåts enligt de regler som du har angett.

Du kan konfigurera CORS-inställningen (Cross-origin resource sharing) från Azure Portal eller från en Azure Resource Manager-mall. För Azure Cosmos DB-konton som använder API:et för NoSQL stöder Azure Cosmos DB ett JavaScript-bibliotek som fungerar i både Node.js och webbläsarbaserade miljöer. Det här biblioteket kan nu dra nytta av CORS-stöd när du använder gatewayläge. Det finns ingen konfiguration på klientsidan som behövs för att använda den här funktionen. Med CORS-stöd kan resurser från en webbläsare komma åt Azure Cosmos DB direkt via JavaScript-biblioteket eller direkt från REST-API:et för enkla åtgärder.

Kommentar

CORS-stöd är endast tillämpligt och stöds för Azure Cosmos DB för NoSQL. Det är inte tillämpligt för Azure Cosmos DB-API:er för Cassandra, Gremlin eller MongoDB, eftersom dessa protokoll inte använder HTTP för klient-server-kommunikation.

Aktivera CORS-stöd från Azure Portal

Följ de här stegen för att aktivera resursdelning mellan ursprung med hjälp av Azure Portal:

  1. Gå till ditt Azure Cosmos DB-konto. Öppna CORS-sidan.

  2. Ange en kommaavgränsad lista över ursprung som kan göra korsande anrop till ditt Azure Cosmos DB-konto. Till exempel https://www.mydomain.com, https://mydomain.com, https://api.mydomain.com. Du kan också använda ett jokertecken "*" för att tillåta alla ursprung och välja Skicka.

    Kommentar

    För närvarande kan du inte använda jokertecken som en del av domännamnet. Till exempel https://*.mydomain.net stöds inte formatet ännu.

    Aktivera resursdelning mellan ursprung med hjälp av Azure Portal

Aktivera CORS-stöd från Resource Manager-mall

Om du vill aktivera CORS med hjälp av en Resource Manager-mall lägger du till avsnittet "cors" med egenskapen "allowedOrigins" i alla befintliga mallar. Den här JSON-filen är ett exempel på en mall som skapar ett nytt Azure Cosmos DB-konto med CORS aktiverat.

{
  "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"
      }
    ]
  }
}

Använda Azure Cosmos DB JavaScript-biblioteket från en webbläsare

I dag har Azure Cosmos DB JavaScript-biblioteket endast CommonJS-versionen av biblioteket som levereras med paketet. Om du vill använda det här biblioteket från webbläsaren måste du använda ett verktyg som Sammanslagning eller Webpack för att skapa ett webbläsarkompatibelt bibliotek. Vissa Node.js bibliotek bör ha webbläsarförakt för dem. Det här är ett exempel på en webpack-konfigurationsfil som har de nödvändiga mock-inställningarna.

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")
  }
};

Här är ett kodexempel som använder TypeScript och Webpack med Azure Cosmos DB JavaScript SDK-biblioteket. Exemplet skapar en Todo-app som skickar realtidsuppdateringar när nya objekt skapas.

Nästa steg

Mer information om andra sätt att skydda ditt Azure Cosmos DB-konto finns i följande artiklar: