Partilhar via


Configurar o compartilhamento de recursos entre origens (CORS)

APLICA-SE A: NoSQL

A Partilha de Recursos de Origem Cruzada (CORS) é uma caraterística HTTP que permite que uma aplicação Web em execução num domínio aceda a recursos noutro domínio. Os navegadores da Web implementam uma restrição de segurança conhecida como política de mesma origem que impede que uma página da Web chame APIs em um domínio diferente. No entanto, o CORS fornece uma maneira segura de permitir que o domínio de origem chame APIs em outro domínio. A API para NoSQL no Azure Cosmos DB agora oferece suporte ao CORS (Cross-Origin Resource Sharing) usando o cabeçalho "allowedOrigins". Depois de habilitar o suporte CORS para sua conta do Azure Cosmos DB, somente as solicitações autenticadas são avaliadas para determinar se são permitidas de acordo com as regras especificadas.

Você pode definir a configuração de compartilhamento de recursos entre origens (CORS) no portal do Azure ou em um modelo do Azure Resource Manager. Para contas do Azure Cosmos DB que usam a API para NoSQL, o Azure Cosmos DB dá suporte a uma biblioteca JavaScript que funciona em ambientes baseados em Node.js e navegador. Essa biblioteca agora pode aproveitar o suporte a CORS ao usar o modo Gateway. Não há nenhuma configuração do lado do cliente necessária para usar esse recurso. Com o suporte a CORS, os recursos de um navegador podem acessar diretamente o Azure Cosmos DB por meio da biblioteca JavaScript ou diretamente da API REST para operações simples.

Nota

O suporte a CORS só é aplicável e suportado para o Azure Cosmos DB para NoSQL. Não é aplicável às APIs do Azure Cosmos DB para Cassandra, Gremlin ou MongoDB, pois esses protocolos não usam HTTP para comunicação cliente-servidor.

Habilitar o suporte a CORS do portal do Azure

Siga estas etapas para habilitar o compartilhamento de recursos entre origens usando o portal do Azure:

  1. Navegue até sua conta do Azure Cosmos DB. Abra a página CORS .

  2. Especifique uma lista de origens separada por vírgulas que pode fazer chamadas de origem cruzada para sua conta do Azure Cosmos DB. Por exemplo, https://www.mydomain.com, , https://api.mydomain.comhttps://mydomain.com. Você também pode usar um curinga "*" para permitir todas as origens e selecionar Enviar.

    Nota

    Atualmente, não é possível usar curingas como parte do nome de domínio. Por exemplo, https://*.mydomain.net o formato ainda não é suportado.

    Habilitar o compartilhamento de recursos entre origens usando o portal do Azure

Habilitar o suporte a CORS a partir do modelo do Gerenciador de Recursos

Para habilitar o CORS usando um modelo do Gerenciador de Recursos, adicione a seção "cors" com a propriedade "allowedOrigins" a qualquer modelo existente. Esse JSON é um exemplo de um modelo que cria uma nova conta do Azure Cosmos DB com o CORS habilitado.

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

Usando a biblioteca JavaScript do Azure Cosmos DB a partir de um navegador

Hoje, a biblioteca JavaScript do Azure Cosmos DB só tem a versão CommonJS da biblioteca fornecida com seu pacote. Para usar essa biblioteca do navegador, você precisa usar uma ferramenta como Rollup ou Webpack para criar uma biblioteca compatível com o navegador. Certas bibliotecas Node.js devem ter simulações do navegador para elas. Este é um exemplo de um arquivo de configuração do webpack que tem as configurações simuladas necessárias.

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

Aqui está um exemplo de código que usa TypeScript e Webpack com a biblioteca do SDK JavaScript do Azure Cosmos DB. O exemplo cria um aplicativo Todo que envia atualizações em tempo real quando novos itens são criados.

Como prática recomendada, não use a chave primária para se comunicar com o Azure Cosmos DB a partir do navegador. Em vez disso, use tokens de recursos para se comunicar. Para obter mais informações sobre tokens de recursos, consulte o artigo Protegendo o acesso ao Azure Cosmos DB .

Próximos passos

Para saber mais sobre outras maneiras de proteger sua conta do Azure Cosmos DB, consulte os seguintes artigos: