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

.NET Core集成Azure Key Vault禁用密钥引发get操作报错如何解决

解决方案

问题根因

默认DefaultKeyVaultSecretManager不会过滤禁用状态的密钥,拿到密钥列表后会直接对所有条目调用GetSecret接口,访问禁用密钥时就会抛出权限异常。

实现步骤

1. 自定义密钥过滤管理器

继承DefaultKeyVaultSecretManager,重写Load方法,只保留启用状态的密钥:

using Microsoft.Azure.KeyVault.Models;
using Microsoft.Extensions.Configuration.AzureKeyVault;

public class FilteredKeyVaultSecretManager : DefaultKeyVaultSecretManager
{
    public override bool Load(SecretItem secret)
    {
        // 仅加载已启用的密钥
        return secret.Attributes?.Enabled == true && base.Load(secret);
    }
}

2. 替换默认管理器

修改Program.cs中Key Vault注册代码,将原来的DefaultKeyVaultSecretManager替换为自定义的实现:

if (ctx.HostingEnvironment.IsProduction())
{
    var builtConfig = builder.Build();
    var keyVaultEndpoint = $"https://{builtConfig["AppSettings:KeyVaultName"]}.vault.azure.net/";
    
    var azureServiceTokenProvider = new AzureServiceTokenProvider();
    var keyVaultClient = new KeyVaultClient(
        new KeyVaultClient.AuthenticationCallback(
            azureServiceTokenProvider.KeyVaultTokenCallback));
    // 替换为自定义的过滤管理器
    builder.AddAzureKeyVault(keyVaultEndpoint, keyVaultClient, new FilteredKeyVaultSecretManager());
}

说明

  • 过滤逻辑直接复用List Secrets接口返回的密钥属性,不需要额外发起API请求,无额外性能开销
  • 保留了DefaultKeyVaultSecretManager的原有逻辑,比如对带--的密钥转换为配置层级的规则不会受到影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:54:04