Api-使用azure keyvault SecretClient .net sdk时必须指定版本

Api-version must be specified when using azure keyvault SecretClient .net sdk

我正在尝试使用托管标识在 azure keyvault 中设置一个秘密。我现在面临两个问题。希望有人能帮助我。

代码:

 var client = new SecretClient(new Uri("keyvaulturl"),
              new DefaultAzureCredential(new DefaultAzureCredentialOptions()
              { ExcludeManagedIdentityCredential = true }));

            await client.SetSecretAsync(new KeyVaultSecret(keyName, 
                               serializer.SerializeObject(someobject)));

问题一:

DefaultAzureCrendetialOption 不适用于托管身份,但是当我将 ExcludeManagedIdentityCredential 设置为 true 时,它​​能够回退到下一个身份验证提供程序(必须是 azure cli)。我不确定为什么会发生这种情况,因为在相同代码工作的前几天,我能够使用相同代码设置和检索 keyvault 机密。(当然不使用任何 DefaultAzureCredentialOptions 参数)。

请注意,此问题仅发生在我的本地环境中,并且托管身份在 azure 中部署时工作正常。

问题二:

当为本地开发将 ExcludeManagedIdentityCredential 设置为 true 时,我开始看到另一个问题,它给我的错误是缺少 api-version。我不明白为什么以及在何处需要在使用 azure .net sdk 时指定 api 版本。

错误:

服务请求失败。 状态:400(错误请求)

内容: {"error":{"code":"BadParameter","message":"api-必须指定版本"}}

问题一:

Managed Identity 在设计上不能用于验证 locally-running 应用程序。尝试阅读 document.

中的 重要 提示

Managed Identity cannot be used to authenticate locally-running applications. Your application must be deployed to an Azure service that supports Managed Identity.

问题二:

请将 Azure Key Vault 机密客户端库的版本更改为最新版本。

dotnet add package Azure.Security.KeyVault.Secrets

我在本地用 environment variables 试过 DefaultAzureCredential

string keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");

var kvUri = "https://" + keyVaultName + ".vault.azure.net";

var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());
KeyVaultSecret secret = new KeyVaultSecret("testdefault", "123456");
KeyVaultSecret result = await client.SetSecretAsync(secret);

Console.WriteLine(result.Name);