Freigeben über


Konfigurieren der Ressourcenfreigabe zwischen verschiedenen Ursprüngen (CORS)

GILT FÜR: NoSQL

CORS (Cross Origin Resource Sharing; Ressourcenfreigabe zwischen verschiedenen Ursprüngen) ist eine HTTP-Funktion, die einer Webanwendung, die in einer Domäne ausgeführt wird, den Zugriff auf Ressourcen in einer anderen Domäne ermöglicht. In Webbrowser ist eine Sicherheitseinschränkung implementiert, die als „Same Origin Policy“ bekannt ist und verhindert, dass eine Webseite APIs in einer anderen Domäne aufruft. CORS bietet jedoch eine sichere Methode, um der Ursprungsdomäne den Aufruf von APIs in einer anderen Domäne zu erlauben. Die API für NoSQL in Azure Cosmos DB unterstützt jetzt CORS (Cross-Origin Resource Sharing, Ressourcenfreigabe zwischen verschiedenen Ursprüngen) mithilfe des Headers „allowedOrigins“. Nachdem Sie die CORS-Unterstützung für Ihr Azure Cosmos DB-Konto aktiviert haben, werden nur authentifizierte Anforderungen ausgewertet, um festzustellen, ob sie entsprechend den angegebenen Regeln zulässig sind.

Sie können die CORS-Einstellung im Azure-Portal oder über eine Azure Resource Manager-Vorlage konfigurieren. Für Azure Cosmos DB-Konten, die die API for NoSQL verwenden, unterstützt Azure Cosmos DB eine JavaScript-Bibliothek, die sowohl mit Node.js als auch in browsergestützten Umgebungen verwendet werden kann. Diese Bibliothek kann nun bei Verwendung des Gateway-Modus die Vorteile der CORS-Unterstützung nutzen. Um dieses Feature zu verwenden, ist clientseitig keine Konfiguration erforderlich. Mit der CORS-Unterstützung können Ressourcen in einem Browser über die JavaScript-Bibliothek oder direkt über die REST-API direkt auf Azure Cosmos DB zugreifen. Das vereinfacht die Vorgänge.

Hinweis

Die CORS-Unterstützung steht nur für Azure Cosmos DB for NoSQL zur Verfügung. Sie trifft nicht auf die Azure Cosmos DB-APIs für Cassandra, Gremlin oder MongoDB zu, da diese Protokolle kein HTTP für die Kommunikation zwischen Client und Server verwenden.

Aktivieren der CORS-Unterstützung im Azure-Portal

Führen Sie die folgenden Schritte aus, um CORS im Azure-Portal zu aktivieren:

  1. Navigieren Sie zu Ihrem Azure Cosmos DB-Konto. Öffnen Sie die Seite CORS.

  2. Geben Sie eine durch Kommas getrennte Liste von Ursprüngen an, die ursprungsübergreifende Aufrufe an Ihr Cosmos DB-Konto richten können. Beispiel: https://www.mydomain.com, https://mydomain.com, https://api.mydomain.com. Sie können auch den Platzhalter „*“ verwenden, um alle Ursprünge zuzulassen. Wählen Sie dann Senden aus.

    Hinweis

    Derzeit können Sie Platzhalter nicht in Domänennamen verwenden. Das Format https://*.mydomain.net beispielsweise wird noch nicht unterstützt.

    Aktivieren von CORS im Azure-Portal

Aktivieren der CORS-Unterstützung über eine Azure Resource Manager-Vorlage

Zum Aktivieren von CORS mithilfe einer Azure Resource Manager-Vorlage fügen Sie einer beliebigen vorhandenen Vorlage den Abschnitt „cors“ mit der Eigenschaft „allowedOrigins“ hinzu. Das folgende JSON-Beispiel ist eine Vorlage, die ein neues Azure Cosmos DB-Konto erstellt, bei dem CORS aktiviert ist.

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

Verwenden der JavaScript-Bibliothek von Azure Cosmos DB in einem Browser

Zurzeit wird die JavaScript-Bibliothek von Azure Cosmos DB nur mit der CommonJS-Version der Bibliothek ausgeliefert. Wenn Sie die Bibliothek im Browser verwenden möchten, müssen Sie ein Tool wie Rollup oder Webpack verwenden, um eine browserkompatible Bibliothek zu erstellen. Für bestimmte Node.js-Bibliotheken sollten Browser-Mocks bereitgestellt werden. Im Folgenden finden Sie ein Beispiel für eine Webpack-Konfigurationsdatei mit den erforderlichen Mock-Einstellungen.

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

Dieses Codebeispiel verwendet TypeScript und Webpack mit der JavaScript SDK-Bibliothek für Azure Cosmos DB. Das Beispiel erstellt eine Todo-App, die Echtzeitaktualisierungen sendet, wenn neue Elemente erstellt werden.

Als bewährte Methode empfiehlt es sich, nicht den Primärschlüssel für die Kommunikation mit Azure Cosmos DB über den Browser zu verwenden. Verwenden Sie stattdessen Ressourcentoken. Weitere Informationen zu Ressourcentoken finden Sie unter Sichern des Zugriffs auf Daten in Azure Cosmos DB.

Nächste Schritte

Weitere Informationen zu anderen Möglichkeiten zum Schutz Ihres Azure Cosmos DB-Kontos finden Sie in den folgenden Artikeln: