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

求助:寻找托管身份结合DocumentClient操作Cosmos DB的相关资源

从Cosmos DB连接字符串迁移至托管身份认证(DocumentClient版本)

核心前置条件

  • 确认你的部署环境(Azure App Service、VM、AKS等)已启用系统托管身份或用户托管身份
  • 为托管身份在Cosmos DB的IAM中分配对应权限(如Cosmos DB Built-in Data Contributor、Cosmos DB Built-in Data Reader,根据业务需求选择)

代码改造示例

原连接字符串初始化代码

// 旧代码:使用连接字符串认证
var client = new DocumentClient(new Uri(cosmosEndpoint), cosmosConnectionString);

托管身份认证改造代码

using Microsoft.Azure.Services.AppAuthentication;
using Microsoft.Azure.Documents;
using System.Threading.Tasks;

// 获取Cosmos DB访问令牌
var tokenProvider = new AzureServiceTokenProvider();
var accessToken = await tokenProvider.GetAccessTokenAsync("https://cosmos.azure.com/");

// 实现IAccessTokenProvider接口,提供令牌
public class ManagedIdentityTokenProvider : IAccessTokenProvider
{
    private readonly string _token;
    public ManagedIdentityTokenProvider(string token) => _token = token;

    public Task<string> GetAuthorizationTokenAsync(Uri resourceAddress, ResourceType resourceType, OperationType operationType, System.Threading.CancellationToken cancellationToken)
    {
        return Task.FromResult(_token);
    }
}

// 初始化DocumentClient
var client = new DocumentClient(
    new Uri(cosmosEndpoint),
    new ManagedIdentityTokenProvider(accessToken),
    new ConnectionPolicy()
);

关键注意事项

  • 需安装NuGet包:Microsoft.Azure.Services.AppAuthentication、Microsoft.Azure.DocumentDB
  • 若使用用户托管身份,需在AzureServiceTokenProvider中指定身份ID:new AzureServiceTokenProvider("RunAs=App;AppId=<你的托管身份客户端ID>")
  • 令牌存在过期时间,建议封装自动刷新逻辑,避免请求因令牌失效失败
  • IAM权限分配后需等待数分钟生效,若出现权限错误可先排查角色配置

IAM权限配置步骤

  • 进入Azure门户的Cosmos DB账户页面
  • 切换到「访问控制(IAM)」→「添加角色分配」
  • 选择对应权限角色,分配对象类型选「托管身份」,找到你的应用/资源对应的托管身份并完成添加

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:03:24