我有一个使用旧 nuget 包的 azure 函数。今天,当我删除旧的并替换为 Azure.Identity 时,此代码在 Visual Studio 中运行我的代码时触发错误:
if (!string.IsNullOrEmpty(vaultName))
{
configurationBuilder.ConfigurationBuilder.AddAzureKeyVault(
keyVaultUri,
new DefaultAzureCredential());
};
//base.ConfigureAppConfiguration(configurationBuilder);
Configuration = configurationBuilder.ConfigurationBuilder.Build();
错误:
EnvironmentCredential 身份验证不可用。环境变量未完全配置。有关更多信息,请参阅故障排除指南。
如果我直接通过Visual Studio Credential,就可以正常工作。但是,在旧的 nuget 包 AspNetCore.Configuration.Secret 中,传递 DefaultAzureCredential 可以解决我的视觉工作室或生产环境中的问题
configurationBuilder.ConfigurationBuilder.AddAzureKeyVault(
keyVaultUri,
new VisualStudioCredential());
那么有没有办法像以前一样完成这项工作,或者我必须做一些像 if (localenvironment)-> VisualStudioCredential else ->DefaultAzureCredential 这样的解决方案?
EnvironmentCredential 身份验证不可用。环境变量未完全配置。有关更多信息,请参阅故障排除指南。
发生错误是因为环境变量中没有设置正确的
DefaultAzureCredentials
。您需要将以下内容添加到系统环境变量中,如下所示。
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
AZURE_TENANT_ID
下面是一个示例 HTTP 触发器函数,用于使用 Azure.Identity 库中的
DefaultAzureCredential
从 Azure Key Vault 检索机密。
代码:
using System;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using System.Threading.Tasks;
public static class KeyVaultFunction
{
[FunctionName("KeyVaultSecret")]
public static async Task<IActionResult> KeyVaultSecret(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req)
{
var kvUri = "https://<KeyVaultName>.vault.azure.net/";
var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());
var secretName = "<secretName>";
var secret = await client.GetSecretAsync(secretName);
string KVsecret = secret.Value.Value;
return new OkObjectResult(KVsecret);
}
}
终端输出:
浏览器输出:
我在浏览器中成功从 Azure Key Vault 检索了密钥。