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

如何让DefaultAzureCredential在本地开发时使用我的用户凭据?

解决DefaultAzureCredential优先使用Azure VM托管标识的问题

你遇到的问题是因为DefaultAzureCredential的凭据尝试优先级里,Azure虚拟机的系统分配托管标识比Visual Studio凭据更高,所以本地运行时会自动拾取VM的标识,而非你登录Visual Studio的用户凭据,最终导致权限不足。

以下是两种可行的解决方式:

方式一:调整DefaultAzureCredential的凭据选项

通过DefaultAzureCredentialOptions配置,在开发环境排除托管标识,同时保留生产环境所需的凭据类型,实现本地和部署环境的无缝适配:

// 判断当前是否为开发环境
var isDevelopment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == Environments.Development;

var options = new DefaultAzureCredentialOptions
{
    // 开发环境下跳过VM托管标识,优先使用Visual Studio凭据
    ExcludeManagedIdentityCredential = isDevelopment,
    // 生产环境保留托管标识支持,确保部署后正常运行
    IncludeManagedIdentityCredential = !isDevelopment
};

string kvUri = $"https://{keyvaultName}.vault.azure.net";
SecretClient client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential(options));
KeyVaultSecret secret = await client.GetSecretAsync(secretName);

这种方式无需修改部署代码,开发时自动使用你的个人用户凭据,部署到Azure平台后依然可以正常使用目标环境的托管标识。

方式二:强制指定使用VisualStudioCredential(仅开发场景)

如果只需要在本地开发时固定使用Visual Studio凭据,可以直接实例化VisualStudioCredential代替DefaultAzureCredential:

string kvUri = $"https://{keyvaultName}.vault.azure.net";
SecretClient client = new SecretClient(new Uri(kvUri), new VisualStudioCredential());
KeyVaultSecret secret = await client.GetSecretAsync(secretName);

注意:这种方式需要在部署到Azure时替换回DefaultAzureCredential,否则无法使用生产环境的托管标识,灵活性不如方式一。

备选应急方案(不推荐)

如果愿意给开发用的Azure VM托管标识添加Key Vault的Secrets Get权限,也可以解决403错误,但这不符合你期望使用个人用户凭据的需求,仅作为临时应急方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:01:26