Настройка общего доступа к ресурсам независимо от источника (CORS)

ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL

Общий доступ к ресурсам независимо от источника (CORS) — функция HTTP, которая позволяет веб-приложению, работающему в одном домене, обращаться к ресурсам другого домена. Веб-браузеры реализуют ограничение безопасности, известное как политика одного источника, которая не позволяет веб-странице вызывать API-интерфейсы в другом домене. Однако CORS позволяет исходному домену безопасно вызывать API в другом домене. API для NoSQL в Azure Cosmos DB теперь поддерживает общий доступ к ресурсам независимо от источника (CORS) с помощью заголовка allowedOrigins. После включения поддержки CORS для учетной записи Azure Cosmos DB оцениваются только запросы, прошедшие проверку подлинности, чтобы определить, разрешены ли они в соответствии с указанными правилами.

Вы можете настроить общий доступ независимо от источника (CORS) на портале Azure или на основе шаблона Azure Resource Manager. Для учетных записей Azure Cosmos DB, использующих API для NoSQL, Azure Cosmos DB поддерживает библиотеку JavaScript, которая работает как в Node.js, так и в браузерных средах. Теперь для этой библиотеки доступны преимущества поддержки CORS при использовании режима шлюза. Для использования этой функции не нужно ничего настраивать на стороне клиента. С поддержкой CORS ресурсы из браузера могут напрямую обращаться к Azure Cosmos DB через библиотеку JavaScript или непосредственно из REST API для простых операций.

Примечание

Поддержка CORS применима и поддерживается только для Azure Cosmos DB для NoSQL. Она не применима к API Azure Cosmos DB для Cassandra, Gremlin или MongoDB, так как эти протоколы не используют HTTP для обмена данными между клиентом и сервером.

Включение поддержки CORS на портале Azure

Чтобы включить CORS с помощью портала Azure, следуйте инструкциям ниже:

  1. Перейдите к своей учетной записи Azure Cosmos DB. Откройте страницу CORS.

  2. Укажите через запятую список источников, которые могут совершать вызовы независимо от источника в учетную запись Cosmos DB. Например https://www.mydomain.com, https://mydomain.com, https://api.mydomain.com. Вы также можете использовать подстановочный знак "*", чтобы разрешить использование всех источников, и выбрать Отправить.

    Примечание

    В настоящее время в имени домена нельзя использовать подстановочные знаки. Например, формат https://*.mydomain.net еще не поддерживается.

    Включение общего доступа к ресурсам независимо от источника с помощью портала Azure

Включение поддержки CORS из шаблона Resource Manager

Чтобы включить CORS с помощью шаблона Resource Manager, добавьте раздел cors со свойством allowedOrigins в любой имеющийся шаблон. Этот json является примером шаблона, который создает новую учетную запись Azure Cosmos DB с включенным CORS.

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

Использование библиотеки Azure Cosmos DB JavaScript в браузере

Сейчас в библиотеке Azure Cosmos DB JavaScript доступна только библиотека версии CommonJS, которая поставляется в составе пакета. Чтобы использовать эту библиотеку из браузера, необходимо использовать такое средство, как Rollup или Webpack для создания Библиотеки, совместимой с браузером. Для некоторых библиотек Node.js нужны макеты браузера. Ниже приведен пример файла конфигурации webpack, который содержит необходимые настройки макетов.

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

Это пример кода, который использует TypeScript и Webpack с библиотекой Azure Cosmos DB JavaScript SDK. В этом примере создается приложение списка дел Todo, которое отправляет обновления в реальном времени при создании новых элементов.

Рекомендуется не использовать первичный ключ для взаимодействия с Azure Cosmos DB из браузера. Вместо этого используйте маркеры ресурсов для обмена данными. Дополнительные сведения о маркерах ресурсов см. в разделе Защита доступа к Azure Cosmos DB.

Дальнейшие действия

Дополнительные сведения о других способах защиты учетной записи Azure Cosmos DB см. в следующих статьях: