Настройка общего доступа к ресурсам независимо от источника (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, следуйте инструкциям ниже:
Перейдите к своей учетной записи Azure Cosmos DB. Откройте страницу CORS.
Укажите через запятую список источников, которые могут совершать вызовы независимо от источника в учетную запись Cosmos DB. Например
https://www.mydomain.com
,https://mydomain.com
,https://api.mydomain.com
. Вы также можете использовать подстановочный знак "*", чтобы разрешить использование всех источников, и выбрать Отправить.Примечание.
В настоящее время в имени домена нельзя использовать подстановочные знаки. Например, формат
https://*.mydomain.net
еще не поддерживается.
Включение поддержки 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 см. в следующих статьях: