0

我正在尝试从本地 Web api 使用 Azure.Identity lib 从 KeyVault 检索机密。但它会抛出 Invalid Issuer。下面给出我正在使用的代码

我当前的代码

var client = new SecretClient(new Uri("key-vault-url"), new DefaultAzureCredential());    ==> line #1
var secret = client.GetSecret("DicomSecret").Value;                           ==> line #2

一旦解析第 2 行,它就会引发以下错误。 在此处输入图像描述

我试过的

  1. 我已通过“添加访问策略”在 KeyVault 中添加了我的 Azure 凭据
  2. 尝试在第 1 行中使用 ManagedIdentityCredential 而不是 DefaultAzureCredential
  3. 还尝试在第 1 行中使用 VisualStudioCredential 而不是 DefaultAzureCredential

我还读到我可以使用 EnvironmentCredential,我需要为此提供 AZURE_TENANT_ID、AZURE_CLIENT_ID、AZURE_CLIENT_SECRET,但我不完全确定如何以及为此包括什么 - 我无权访问 AAD。

请让我知道如何解决此问题。

4

2 回答 2

0

这是我的代码,看起来和你的没有区别。

using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Identity.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace test0430callingapi.Controllers
{
    public class HelloController : Controller
    {
        public async Task<string> IndexAsync()
        {
            const string secretName = "clientsecret";
            var kvUri = "https://keyvaultname.vault.azure.net/";
            var a = new DefaultAzureCredential();
            var client = new SecretClient(new Uri(kvUri), a);
            var secret = await client.GetSecretAsync(secretName);
            string secretVaule = secret.Value.Value;
            return secretVaule ;
        }
    }
}

然后我认为您可以尝试检查DefaultAzureCredential。在Visual Studio中运行代码时,我们需要确保您已通过在门户中添加访问策略以具有 azure key vault 访问权限的用户登录。或者,也许您已经添加了用户,然后您可以检查是否为用户添加了足够的权限。

如果它也失败了,您可以尝试通过 api 访问密钥库的另一种方式。更多细节可以参考这个答案

于 2021-08-05T02:05:00.153 回答
0

由于我试图从本地开发环境(VS 2019)连接到 Azure,因此需要额外的凭据。

因此,在我的开发环境(本地主机)中,我不得不使用 DefaultAzureCredentialOptions VisualStudioTenantId 和 SecretClient。

var tenantId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
DefaultAzureCredentialOptions options = new DefaultAzureCredentialOptions()
 { 
     VisualStudioTenantId = tenantId, 
     SharedTokenCacheTenantId = tenantId 
};
var client = new SecretClient(
             new Uri(key-vault-url), 
             new DefaultAzureCredential(options)
             );
  

以上帮助我从本地执行,但在将其部署到 Azure Ap Service 后,下面的代码行就足够了。所以我只将上面的代码用于我的本地测试。

var client = new SecretClient(new Uri("key-vault-url"), new DefaultAzureCredential()); 

                
于 2021-08-13T16:24:46.243 回答