升级到 Azure.Identity 包后,azure 功能无法在本地计算机上运行

问题描述 投票:0回答:1

我有一个使用旧 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 这样的解决方案?

azure-functions azure-identity
1个回答
0
投票

EnvironmentCredential 身份验证不可用。环境变量未完全配置。有关更多信息,请参阅故障排除指南。

发生错误是因为环境变量中没有设置正确的

DefaultAzureCredentials
。您需要将以下内容添加到系统环境变量中,如下所示。

AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
AZURE_TENANT_ID

enter image description here

下面是一个示例 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);
    }
}

终端输出:

enter image description here

浏览器输出:

我在浏览器中成功从 Azure Key Vault 检索了密钥。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.