访问Azure Keyvault时出现问题-DefaultAzureCredential无法检索令牌

访问Azure Keyvault时出现问题-DefaultAzureCredential无法检索令牌,azure,azure-keyvault,Azure,Azure Keyvault,我正在访问Azure Keyvault中存储的值。使用VisualStudio进行开发,我能够从Keyvault中获取数据,没有任何问题。但是,当代码部署到不同的环境(如Test或Stage)时,我会遇到一个错误 我用来访问Keyvault的凭据存储在项目的环境变量中 Visual Studio>项目>右键单击属性>调试>环境变量 环境变量包括: Azure\u客户端\u Id Azure\u租户\u Id Azure_客户端_机密 下面是访问Keyvault的代码,通过VisualStud

我正在访问Azure Keyvault中存储的值。使用VisualStudio进行开发,我能够从Keyvault中获取数据,没有任何问题。但是,当代码部署到不同的环境(如Test或Stage)时,我会遇到一个错误

我用来访问Keyvault的凭据存储在项目的环境变量中

Visual Studio>项目>右键单击属性>调试>环境变量

环境变量包括:

  • Azure\u客户端\u Id
  • Azure\u租户\u Id
  • Azure_客户端_机密
下面是访问Keyvault的代码,通过VisualStudio使用时效果良好

var KeyVaultData = new Azure.Security.KeyVault.Secrets.SecretClient(vaultUri: new Uri(@"https://{VaultName}.vault.azure.net/"), credential: new Azure.Identity.DefaultAzureCredential());
但是,如果将其部署到其他环境中,我会遇到以下错误:

发生异常-Azure.Identity.CredentialAlunavailableException:DefaultAzureCredential无法从包含的凭据中检索令牌。 环境凭据身份验证不可用。未完全配置环境变量。 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);

DefaultAzureCredential
将在本地自动使用环境变量,因此如果您已经设置了环境变量,它当然会工作。如果环境变量不可用,它将尝试
managedEntityCredential
SharedTokenCacheCredential
InteractiveBrowserCredential
,当您将代码部署到您提到的环境中时,这些环境都不可用,因此您将收到错误

在这种情况下,如果要将代码部署到不同的环境,则需要使用,将参数直接传递给,然后代码将在任何地方工作

public ClientSecretCredential (string tenantId, string clientId, string clientSecret);

有关于这个问题的更新吗?@JoyWang感谢您的回复。对不起,我无法检查它,让我修改我的代码并回复你。嗨,你现在明白了吗?谢谢你的跟进。根据您的回答,现在我可以从VisualStudio中的密钥库中获取值(新代码就在我的问题下面)。但是,我没有将代码移动到不同的环境,因为我已经硬编码了凭据。我是否将这些凭据保存在secrets.json或appsettings中?如果保存在其中任何一个环境中,我应该请求在Azure中执行哪些相应的更改?不,您需要将凭据直接传递给构造函数,因为这种方法适用于所有环境,对于不同的环境,有更好的方法。