访问Azure Keyvault时出现问题-DefaultAzureCredential无法检索令牌
我正在访问Azure Keyvault中存储的值。使用VisualStudio进行开发,我能够从Keyvault中获取数据,没有任何问题。但是,当代码部署到不同的环境(如Test或Stage)时,我会遇到一个错误 我用来访问Keyvault的凭据存储在项目的环境变量中 Visual Studio>项目>右键单击属性>调试>环境变量 环境变量包括:访问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\u客户端\u Id
- Azure\u租户\u Id
- Azure_客户端_机密
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中执行哪些相应的更改?不,您需要将凭据直接传递给构造函数,因为这种方法适用于所有环境,对于不同的环境,有更好的方法。