你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用服务连接器集成 Azure Cosmos DB for MongoDB

本页显示了支持的身份验证方法和客户端,并演示了可用于使用服务连接or 将 Azure Cosmos DB for MongoDB 连接到其他云服务的示例代码。 你仍可以使用其他编程语言连接到 Azure Cosmos DB for MongoDB,而无需使用服务连接or。 此页面还显示了你在创建服务连接时获得的默认环境变量名称和值(或 Spring Boot 配置)。

受支持的计算服务

服务连接器可用于将以下计算服务连接到 Azure Cosmos DB for MongoDB:

  • Azure 应用服务
  • Azure Functions
  • Azure Container Apps
  • Azure Spring Apps

受支持的身份验证类型和客户端类型

下表显示了使用服务连接or将计算服务连接到 Azure Cosmos DB for MongoDB 时支持的客户端类型和身份验证方法的组合。 “是”表示支持组合,而“否”则表示不支持该组合。

客户端类型 系统分配的托管标识 用户分配的托管标识 机密/连接字符串 服务主体
.NET
Java
Java - Spring Boot No
Node.js
Python
Go

此表指示支持表中的所有客户端类型和身份验证方法组合,但 Java - Spring Boot 客户端类型除外,后者仅支持 Secret /连接字符串 方法。 所有其他客户端类型都可以使用任何身份验证方法通过服务连接or连接到 Azure Cosmos DB for MongoDB。

默认环境变量名称或应用程序属性和示例代码

使用以下连接详细信息将计算服务连接到 Azure Cosmos DB。 此页面还显示创建服务连接时获得的默认环境变量名称和值(或 Spring Boot 配置),以及示例代码。 对于下面每个示例,请将占位符文本 <mongo-db-admin-user><password><Azure-Cosmos-DB-API-for-MongoDB-account><subscription-ID><resource-group-name><client-secret><tenant-id> 替换为你自己的信息。 有关命名约定的详细信息,检查 Service 连接or internals 一文。

系统分配的托管标识

默认环境变量名称 说明 示例值
AZURE_COSMOS_LISTCONNECTIONSTRINGURL 用户获取连接字符串的 URL https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<Azure-Cosmos-DB-API-for-MongoDB-account>/listConnectionStrings?api-version=2021-04-15
AZURE_COSMOS_SCOPE 托管标识范围 https://management.azure.com/.default
AZURE_COSMOS_RESOURCEENDPOINT 资源终结点 https://<Azure-Cosmos-DB-API-for-MongoDB-account>.documents.azure.com:443/

示例代码

请参阅下面的步骤和代码,使用系统分配的托管标识连接到 Azure Cosmos DB for MongoDB。

  1. 安装依赖项

    dotnet add package MongoDb.Driver
    dotnet add package Azure.Identity
    
  2. 使用客户端库 Azure.Identity 获取托管标识或服务主体的访问令牌。 使用访问令牌并AZURE_COSMOS_LISTCONNECTIONSTRINGURL获取连接字符串。 从服务连接或连接到 Azure Cosmos DB for MongoDB 添加的环境变量获取连接信息。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。

    using System;
    using System.Security.Authentication;
    using System.Net.Security;
    using System.Net.Http;
    using System.Security.Authentication;
    using System.Security.Cryptography.X509Certificates;
    using System.Threading.Tasks;
    using MongoDB.Driver;
    using Azure.Identity;
    using System.Text.Json;
    
    var endpoint = Environment.GetEnvironmentVariable("AZURE_COSMOS_RESOURCEENDPOINT");
    var listConnectionStringUrl = Environment.GetEnvironmentVariable("AZURE_COSMOS_LISTCONNECTIONSTRINGURL");
    var scope = Environment.GetEnvironmentVariable("AZURE_COSMOS_SCOPE");
    
    // Uncomment the following lines according to the authentication type.
    // For system-assigned identity.
    // var tokenProvider = new DefaultAzureCredential();
    
    // For user-assigned identity.
    // var tokenProvider = new DefaultAzureCredential(
    //     new DefaultAzureCredentialOptions
    //     {
    //         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTID");
    //     }
    // );
    
    // For service principal.
    // var tenantId = Environment.GetEnvironmentVariable("AZURE_COSMOS_TENANTID");
    // var clientId = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTID");
    // var clientSecret = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTSECRET");
    // var tokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);
    
    // Acquire the access token. 
    AccessToken accessToken = await tokenProvider.GetTokenAsync(
        new TokenRequestContext(scopes: new string[]{ scope }));
    
    // Get the connection string.
    var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken.Token}");
    var response = await httpClient.POSTAsync(listConnectionStringUrl);
    var responseBody = await response.Content.ReadAsStringAsync();
    var connectionStrings = JsonSerializer.Deserialize<Dictionary<string, List<Dictionary<string, string>>>>(responseBody);
    string connectionString = connectionStrings["connectionStrings"][0]["connectionString"];
    
    // Connect to Azure Cosmos DB for MongoDB
    var client = new MongoClient(connectionString);
    

用户分配的托管标识

默认环境变量名称 说明 示例值
AZURE_COSMOS_LISTCONNECTIONSTRINGURL 用户获取连接字符串的 URL https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<Azure-Cosmos-DB-API-for-MongoDB-account>/listConnectionStrings?api-version=2021-04-15
AZURE_COSMOS_SCOPE 托管标识范围 https://management.azure.com/.default
AZURE_COSMOS_CLIENTID 客户端 ID <client-ID>
AZURE_COSMOS_RESOURCEENDPOINT 资源终结点 https://<Azure-Cosmos-DB-API-for-MongoDB-account>.documents.azure.com:443/

示例代码

请参阅下面的步骤和代码,使用用户分配的托管标识连接到 Azure Cosmos DB for MongoDB。

  1. 安装依赖项

    dotnet add package MongoDb.Driver
    dotnet add package Azure.Identity
    
  2. 使用客户端库 Azure.Identity 获取托管标识或服务主体的访问令牌。 使用访问令牌并AZURE_COSMOS_LISTCONNECTIONSTRINGURL获取连接字符串。 从服务连接或连接到 Azure Cosmos DB for MongoDB 添加的环境变量获取连接信息。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。

    using System;
    using System.Security.Authentication;
    using System.Net.Security;
    using System.Net.Http;
    using System.Security.Authentication;
    using System.Security.Cryptography.X509Certificates;
    using System.Threading.Tasks;
    using MongoDB.Driver;
    using Azure.Identity;
    using System.Text.Json;
    
    var endpoint = Environment.GetEnvironmentVariable("AZURE_COSMOS_RESOURCEENDPOINT");
    var listConnectionStringUrl = Environment.GetEnvironmentVariable("AZURE_COSMOS_LISTCONNECTIONSTRINGURL");
    var scope = Environment.GetEnvironmentVariable("AZURE_COSMOS_SCOPE");
    
    // Uncomment the following lines according to the authentication type.
    // For system-assigned identity.
    // var tokenProvider = new DefaultAzureCredential();
    
    // For user-assigned identity.
    // var tokenProvider = new DefaultAzureCredential(
    //     new DefaultAzureCredentialOptions
    //     {
    //         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTID");
    //     }
    // );
    
    // For service principal.
    // var tenantId = Environment.GetEnvironmentVariable("AZURE_COSMOS_TENANTID");
    // var clientId = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTID");
    // var clientSecret = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTSECRET");
    // var tokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);
    
    // Acquire the access token. 
    AccessToken accessToken = await tokenProvider.GetTokenAsync(
        new TokenRequestContext(scopes: new string[]{ scope }));
    
    // Get the connection string.
    var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken.Token}");
    var response = await httpClient.POSTAsync(listConnectionStringUrl);
    var responseBody = await response.Content.ReadAsStringAsync();
    var connectionStrings = JsonSerializer.Deserialize<Dictionary<string, List<Dictionary<string, string>>>>(responseBody);
    string connectionString = connectionStrings["connectionStrings"][0]["connectionString"];
    
    // Connect to Azure Cosmos DB for MongoDB
    var client = new MongoClient(connectionString);
    

连接字符串

SpringBoot 客户端类型

默认环境变量名称 说明 示例值
spring.data.mongodb.database 你的数据库 <database-name>
spring.data.mongodb.uri 你的数据库 URI mongodb://<mongo-db-admin-user>:<password>@<mongo-db-server>.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000&appName=@<mongo-db-server>@

其他客户端类型

默认环境变量名称 说明 示例值
AZURE_COSMOS_CONNECTIONSTRING MongoDB API 连接字符串 mongodb://<mongo-db-admin-user>:<password>@<mongo-db-server>.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000&appName=@<mongo-db-server>@

示例代码

请参阅下面的步骤和代码,以使用 连接字符串 连接到 Azure Cosmos DB for MongoDB。

  1. 安装依赖项。

    dotnet add package MongoDb.Driver
    
  2. 从服务连接or 添加的环境变量中获取连接字符串,并连接到 Azure Cosmos DB for MongoDB。

    using MongoDB.Driver;
    
    var connectionString = Environment.GetEnvironmentVariable("AZURE_COSMOS_CONNECTIONSTRING");
    var client = new MongoClient(connectionString);
    

服务主体

默认环境变量名称 说明 示例值
AZURE_COSMOS_LISTCONNECTIONSTRINGURL 用户获取连接字符串的 URL https://management.azure.com/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<Azure-Cosmos-DB-API-for-MongoDB-account>/listConnectionStrings?api-version=2021-04-15
AZURE_COSMOS_SCOPE 托管标识范围 https://management.azure.com/.default
AZURE_COSMOS_CLIENTID 客户端 ID <client-ID>
AZURE_COSMOS_CLIENTSECRET 客户端密码 <client-secret>
AZURE_COSMOS_TENANTID 租户 ID <tenant-ID>
AZURE_COSMOS_RESOURCEENDPOINT 资源终结点 https://<Azure-Cosmos-DB-API-for-MongoDB-account>.documents.azure.com:443/

示例代码

请参阅下面的步骤和代码,以使用服务主体连接到 Azure Cosmos DB for MongoDB。

  1. 安装依赖项

    dotnet add package MongoDb.Driver
    dotnet add package Azure.Identity
    
  2. 使用客户端库 Azure.Identity 获取托管标识或服务主体的访问令牌。 使用访问令牌并AZURE_COSMOS_LISTCONNECTIONSTRINGURL获取连接字符串。 从服务连接或连接到 Azure Cosmos DB for MongoDB 添加的环境变量获取连接信息。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。

    using System;
    using System.Security.Authentication;
    using System.Net.Security;
    using System.Net.Http;
    using System.Security.Authentication;
    using System.Security.Cryptography.X509Certificates;
    using System.Threading.Tasks;
    using MongoDB.Driver;
    using Azure.Identity;
    using System.Text.Json;
    
    var endpoint = Environment.GetEnvironmentVariable("AZURE_COSMOS_RESOURCEENDPOINT");
    var listConnectionStringUrl = Environment.GetEnvironmentVariable("AZURE_COSMOS_LISTCONNECTIONSTRINGURL");
    var scope = Environment.GetEnvironmentVariable("AZURE_COSMOS_SCOPE");
    
    // Uncomment the following lines according to the authentication type.
    // For system-assigned identity.
    // var tokenProvider = new DefaultAzureCredential();
    
    // For user-assigned identity.
    // var tokenProvider = new DefaultAzureCredential(
    //     new DefaultAzureCredentialOptions
    //     {
    //         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTID");
    //     }
    // );
    
    // For service principal.
    // var tenantId = Environment.GetEnvironmentVariable("AZURE_COSMOS_TENANTID");
    // var clientId = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTID");
    // var clientSecret = Environment.GetEnvironmentVariable("AZURE_COSMOS_CLIENTSECRET");
    // var tokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);
    
    // Acquire the access token. 
    AccessToken accessToken = await tokenProvider.GetTokenAsync(
        new TokenRequestContext(scopes: new string[]{ scope }));
    
    // Get the connection string.
    var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken.Token}");
    var response = await httpClient.POSTAsync(listConnectionStringUrl);
    var responseBody = await response.Content.ReadAsStringAsync();
    var connectionStrings = JsonSerializer.Deserialize<Dictionary<string, List<Dictionary<string, string>>>>(responseBody);
    string connectionString = connectionStrings["connectionStrings"][0]["connectionString"];
    
    // Connect to Azure Cosmos DB for MongoDB
    var client = new MongoClient(connectionString);
    

后续步骤

参考下面列出的教程来详细了解服务连接器。