首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从本地主机C# Web从Azure KeyVault访问秘密引发错误无效发布器

从本地主机C# Web从Azure KeyVault访问秘密引发错误无效发布器
EN

Stack Overflow用户
提问于 2021-08-04 05:26:04
回答 2查看 815关注 0票数 0

我正在尝试从本地web中使用KeyVault库从Azure.Identity中检索机密信息。但它抛出了无效的发行者。在下面给出我使用的代码

我的当前代码

代码语言:javascript
运行
复制
var client = new SecretClient(new Uri("key-vault-url"), new DefaultAzureCredential());    ==> line #1
var secret = client.GetSecret("DicomSecret").Value;                           ==> line #2

一旦它解析了line#2,它就会抛出以下错误。

我已经尝试过的

  1. 我在KeyVault the‘Add Access策略中添加了Azure凭据
  2. 在ManagedIdentityCredential中尝试用DefaultAzureCredential代替line#1
  3. 还尝试了在VisualStudioCredential中使用DefaultAzureCredential代替line#1

我还读到我可以使用EnvironmentCredential,我需要为它提供AZURE_TENANT_ID、AZURE_CLIENT_ID、AZURE_CLIENT_SECRET,但我不太清楚该如何使用,也不知道应该包含什么内容--我没有访问AAD的权限。

请告诉我如何解决这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-13 16:24:46

由于我试图从本地开发环境(VS 2019年)连接到Azure,所以它希望获得更多的凭据。

因此,在我的dev环境(localhost)中,我必须使用DefaultAzureCredentialOptions VisualStudioTenantId和SecretClient。

代码语言:javascript
运行
复制
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服务之后,下面的代码行就足够了。因此,我只在本地测试中使用了上述代码。

代码语言:javascript
运行
复制
var client = new SecretClient(new Uri("key-vault-url"), new DefaultAzureCredential()); 
票数 1
EN

Stack Overflow用户

发布于 2021-08-05 02:05:00

这是我的代码,似乎和你的没什么区别。

代码语言:javascript
运行
复制
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。在视觉演播室中运行代码时,我们需要确保您已经与具有访问权限的用户进行了登录,用户可以通过在门户中添加访问策略来访问密钥库。或者您已经添加了用户,那么您可以检查是否为用户添加了足够的权限。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68645803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档