Configuration du partage des ressources cross-origin (CORS)

S’APPLIQUE À : NoSQL

CORS (Cross Origin Resource Sharing) est une fonctionnalité HTTP qui permet à une application web exécutée dans un domaine d’accéder aux ressources d’un autre domaine. Les navigateurs web implémentent une restriction de sécurité, appelée stratégie de même origine, qui empêche une page web d’appeler des API dans un domaine différent. Toutefois, CORS permet au domaine d’origine d’appeler des API dans un autre domaine de façon sécurisée. L’API pour NoSQL dans Azure Cosmos DB prend désormais en charge le partage des ressources cross-origin (CORS) avec l'en-tête « allowedOrigins ». Après avoir activé la prise en charge CORS pour votre compte Azure Cosmos DB, seules les requêtes authentifiées sont évaluées pour déterminer si elles sont autorisées selon les règles que vous avez spécifiées.

Vous pouvez configurer le paramètre CORS à partir du portail Azure ou d’un modèle Azure Resource Manager. Pour les comptes Azure Cosmos DB utilisant l’API pour NoSQL, Azure Cosmos DB prend en charge une bibliothèque JavaScript qui fonctionne dans Node.js et dans les environnements de navigateur. Cette bibliothèque peut désormais tirer parti de la prise en charge de CORS lorsque le mode passerelle est utilisé. Cette fonctionnalité ne nécessite aucune configuration côté client. Avec la prise en charge de CORS, les ressources provenant d’un navigateur peuvent accéder directement à Azure Cosmos DB via la bibliothèque JavaScript, ou directement à partir de l’API REST pour les opérations simples.

Notes

La prise en charge de CORS est uniquement applicable et prise en charge pour Azure Cosmos DB for NoSQL. Cela n’est pas applicable aux API Azure Cosmos DB pour Cassandra, Gremlin ou MongoDB, car ces protocoles n’utilisent pas HTTP pour la communication client-serveur.

Activer la prise en charge CORS à partir du portail Azure

Suivez ces étapes pour activer le partage des ressources inter-origines par le biais du portail Azure :

  1. Accédez à votre compte Azure Cosmos DB. Ouvrez la page CORS.

  2. Spécifiez une liste, séparée par des virgules, des origines autorisées à effectuer des appels inter-origines à votre compte Azure Cosmos DB. Par exemple, https://www.mydomain.com, https://mydomain.com, https://api.mydomain.com. Vous pouvez également utiliser un caractère générique « * » pour autoriser toutes les origines, puis sélectionner Envoyer.

    Notes

    Pour le moment, il n’est pas possible d’utiliser des caractères génériques dans un nom de domaine. Par exemple, le format https://*.mydomain.net n’est pas encore pris en charge.

    Activer le partage des ressources inter-origines au moyen du Portail Azure

Activer la prise en charge de CORS à partir du modèle Resource Manager

Pour activer CORS en utilisant un modèle Resource Manager, ajoutez la section « cors » avec la propriété « allowedOrigins » à un modèle existant. Ce code JSON est un exemple de modèle qui crée un compte Azure Cosmos DB avec la fonctionnalité CORS activée.

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

Utilisation de la bibliothèque JavaScript Azure Cosmos DB à partir d’un navigateur

Actuellement, la bibliothèque JavaScript Azure Cosmos DB n’a que la version CommonJS de la bibliothèque fournie avec son package. Pour utiliser cette bibliothèque depuis le navigateur, vous devez utiliser un outil, tel que Rollup ou Webpack, et créer une bibliothèque compatible avec ce navigateur. Certaines bibliothèques Node.js doivent avoir des simulations de navigateur pour cela. Cet exemple est un fichier de configuration webpack qui contient les paramètres de simulation nécessaires.

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

Voici un échantillon de code qui utilise TypeScript et Webpack avec la bibliothèque du SDK JavaScript pour Azure Cosmos DB. L’exemple génère une application Todo qui envoie des mises à jour en temps réel lors de la création de nouveaux éléments.

Une bonne pratique consiste à ne pas utiliser la clé primaire pour communiquer avec Azure Cosmos DB depuis le navigateur. Préférez l’utilisation de jetons de ressource pour communiquer. Pour plus d’informations sur les jetons de ressource, consultez l’article Sécurisation de l’accès aux données Azure Cosmos DB.

Étapes suivantes

Pour connaître les autres moyens de sécuriser votre compte Azure Cosmos DB, consultez les articles suivants :