我正在访问存储在Azure Keyvault中的值。使用Visual Studio进行开发时,我可以毫无问题地从Keyvault获取数据。但是,当将代码部署到Test或Stage等不同环境时,会出现错误。
我用来访问Keyvault的凭据存储在项目的环境变量中。
Visual Studio>项目>右键单击属性>调试>环境变量。
环境变量包含:
下面是访问Keyvault的代码,当通过Visual Studio使用时,它可以正常工作。
var KeyVaultData = new Azure.Security.KeyVault.Secrets.SecretClient(vaultUri: new Uri(@"https://{VaultName}.vault.azure.net/"), credential: new Azure.Identity.DefaultAzureCredential());
但是,当将其部署到其他环境时,出现以下错误:
发生异常-Azure.Identity.CredentialUnavailableException:DefaultAzureCredential无法从包含的凭据中检索令牌。 EnvironmentCredential身份验证不可用。环境变量未完全配置。 ManagedIdentityCredential身份验证不可用,找不到托管身份端点。 SharedTokenCacheCredential身份验证不可用。在缓存中找不到帐户。
我没有访问Azure的权限,但被告知所有设置均已正确设置。
非常感谢您提供帮助解决此问题。
编辑: 基于给定解决方案的新代码:
const string tenantId = "-----";
const string clientId = "-----";
const string clientSecret = "-----";
var keyvaultCredentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var KeyVaultData= new SecretClient(new Uri(@"https://{VaultName}.vault.azure.net/"), keyvaultCredentials);
答案 0 :(得分:0)
DefaultAzureCredential
将在本地自动使用环境变量,因此,当然,如果您设置了环境变量,它将起作用。如果环境变量不可用,它将尝试ManagedIdentityCredential
,
SharedTokenCacheCredential
,
InteractiveBrowserCredential
,当您将代码部署到您提到的环境时,它们都不可用,因此您将得到错误。
在这种情况下,如果要将代码部署到不同的环境,则需要使用ClientSecretCredential
,将参数直接传递给ClientSecretCredential(String, String, String)
,这样代码就可以在任何地方使用。
public ClientSecretCredential (string tenantId, string clientId, string clientSecret);