Поделиться через


Настройка общего доступа к ресурсам независимо от источника (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 в любой имеющийся шаблон. Это пример шаблона, создающего новую учетную запись 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 см. в следующих статьях: