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

C#操作Cosmos DB认证失败及凭证配置疑问

Cosmos DB认证问题解决方案

1. 用环境变量中的主键配置代码

先在PowerShell里设置好对应的环境变量:

$env:COSMOS_DB_URI = "你的Cosmos DB URI"
$env:COSMOS_DB_PRIMARY_KEY = "你的主键值"

在C#代码里,直接通过URI和主键构造CosmosClient,替换原来的DefaultAzureCredential认证方式:

using System;
using Azure.Cosmos;

var cosmosUri = Environment.GetEnvironmentVariable("COSMOS_DB_URI");
var primaryKey = Environment.GetEnvironmentVariable("COSMOS_DB_PRIMARY_KEY");

// 用密钥初始化Cosmos客户端
var cosmosClient = new CosmosClient(cosmosUri, primaryKey);

这种方式会直接使用密钥完成身份验证,解决之前的400认证失败问题。

2. 集成Azure Key Vault到本地PowerShell运行的C#程序

前期准备

  • 在Azure门户创建Key Vault,将Cosmos DB的URI和主键分别存储为机密(可命名为cosmos-db-uri和cosmos-db-primary-key)
  • 本地安装Azure CLI,执行az login登录你的Azure账号
  • 给当前登录用户分配Key Vault的「机密读取者」权限,确保能读取库内的机密

C#代码改造

先安装所需的NuGet包:

dotnet add package Azure.Security.KeyVault.Secrets
dotnet add package Azure.Identity

然后在代码中读取Key Vault的机密,再初始化CosmosClient:

using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Azure.Cosmos;

var keyVaultUrl = "https://你的密钥保管库名称.vault.azure.net/";
var secretClient = new SecretClient(new Uri(keyVaultUrl), new DefaultAzureCredential());

// 异步读取Key Vault中的机密
var uriSecret = await secretClient.GetSecretAsync("cosmos-db-uri");
var primaryKeySecret = await secretClient.GetSecretAsync("cosmos-db-primary-key");

// 初始化Cosmos客户端
var cosmosClient = new CosmosClient(uriSecret.Value, primaryKeySecret.Value);

本地PowerShell运行

运行程序前,确保已经通过Azure CLI完成登录(执行az login),之后直接在PowerShell里运行程序:

dotnet run

DefaultAzureCredential会自动使用CLI的登录上下文访问Key Vault,无需额外配置凭据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 11:22:24