当前位置: 首页 > 知识库问答 >
问题:

在使用azure keyvault SecureClient. net sdk时必须指定api-version

胡利
2023-03-14

我正在尝试使用托管身份在Azure密钥库中设置一个秘密。我现在面临两个问题。希望有人能帮我。

代码:

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

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

问题一:

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

请注意,这个问题只发生在我的本地环境中,托管身份在azure中部署时可以正常工作。

问题2:

当为本地开发将ExcludeManagedEntityCredential设置为true时,我开始看到另一个问题,它给我带来了api版本缺失的错误。我不明白在使用azure时为什么以及在哪里需要指定api版本。net sdk。

错误:

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

内容:{"错误":{"代码":"BadParameter","消息":"必须指定api-version"}}

共有1个答案

国言
2023-03-14

问题一:

托管标识不能用于按设计对本地运行的应用程序进行身份验证。试着阅读文档中的重要提示。

托管标识不能用于对本地运行的应用程序进行身份验证。应用程序必须部署到支持托管标识的Azure服务。

问题2:

请使用最新版本更改Azure Key Vault secret客户端库的版本。

dotnet add package Azure.Security.KeyVault.Secrets

我尝试了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);
 类似资料: