You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用标识对Azure Cosmos DB MongoDB API账户进行身份验证?

使用Azure AD身份验证连接Azure Cosmos DB MongoDB API(替代连接字符串)

核心思路

直接通过Azure AD获取访问令牌,将令牌作为MongoDB客户端的认证凭据,采用MONGODB-AZURE认证机制,无需依赖连接字符串。

步骤与代码示例

1. 安装依赖包

需要添加以下NuGet包:

  • MongoDB.Driver(2.19.0)
  • Microsoft.Identity.Client(用于获取Azure AD令牌,建议最新稳定版)
  • 若使用托管标识,需安装Azure.Identity

2. 获取Azure AD访问令牌

根据你的身份类型选择对应的令牌获取方式:

场景1:服务主体(Client Credential流)
using Microsoft.Identity.Client;

public async Task<string> GetAzureAdTokenForCosmosDb()
{
    var tenantId = "你的Azure AD租户ID";
    var clientId = "服务主体Client ID";
    var clientSecret = "服务主体Client Secret";
    var resourceUri = "https://cosmos.azure.com/"; // Cosmos DB固定资源标识

    var app = ConfidentialClientApplicationBuilder
        .Create(clientId)
        .WithClientSecret(clientSecret)
        .WithAuthority($"https://login.microsoftonline.com/{tenantId}")
        .Build();

    var result = await app.AcquireTokenForClient(new[] { $"{resourceUri}/.default" })
        .ExecuteAsync();

    return result.AccessToken;
}
场景2:托管标识(MSI,直接获取令牌)
using Azure.Core;
using Azure.Identity;

public async Task<string> GetMsiTokenForCosmosDb()
{
    var resourceUri = "https://cosmos.azure.com/";
    var credential = new ManagedIdentityCredential();
    var tokenRequestContext = new TokenRequestContext(new[] { $"{resourceUri}/.default" });
    
    var token = await credential.GetTokenAsync(tokenRequestContext);
    return token.Token;
}

3. 配置MongoDB客户端并执行读写

using MongoDB.Driver;
using MongoDB.Bson;

public async Task ConnectWithAzureAdAuth()
{
    var cosmosDbHost = "你的Cosmos DB账户名.mongo.cosmos.azure.com";
    var databaseName = "目标数据库名";
    var collectionName = "目标集合名";

    // 获取Azure AD令牌
    var accessToken = await GetAzureAdTokenForCosmosDb(); // 或调用托管标识的令牌方法

    // 构建客户端配置
    var settings = MongoClientSettings.FromUrl(new MongoUrl($"mongodb://{cosmosDbHost}:10255/"));
    settings.SslSettings = new SslSettings { EnabledSslProtocols = System.Security.Authentication.SslProtocols.Tls12 };
    settings.AuthMechanism = "MONGODB-AZURE";
    settings.AuthMechanismProperties = new Dictionary<string, object>
    {
        { "ACCESS_TOKEN", accessToken }
    };

    // 创建客户端并操作数据
    var client = new MongoClient(settings);
    var database = client.GetDatabase(databaseName);
    var collection = database.GetCollection<BsonDocument>(collectionName);

    // 示例:插入文档
    var testDoc = new BsonDocument("title", "Azure AD认证测试");
    await collection.InsertOneAsync(testDoc);

    // 示例:查询文档
    var queryResult = await collection.Find(new BsonDocument()).FirstOrDefaultAsync();
    Console.WriteLine(queryResult.ToJson());
}

关键配置与权限说明

  • SSL强制要求:Cosmos DB MongoDB API仅允许TLS 1.2连接,必须配置SslSettings。
  • 认证机制:必须指定MONGODB-AZURE,并将令牌传入AuthMechanismProperties的ACCESS_TOKEN字段。
  • 权限分配:需为你的Azure AD标识(服务主体/托管标识/用户)分配Cosmos DB内置角色,比如Cosmos DB Built-in Data Contributor,确保拥有数据读写权限。

注意事项

  • 访问令牌有效期为1小时,需在过期前重新获取并更新客户端配置,或每次操作前校验令牌有效性。
  • MongoDB.Driver 2.19.0原生支持MONGODB-AZURE认证机制,无需升级版本。

内容的提问来源于stack exchange,提问作者Youxu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 04:53:30