【问题标题】:How to use azure keyvault secret during development in visual studio如何在 Visual Studio 开发过程中使用 azure keyvault secret
【发布时间】:2021-03-04 14:47:49
【问题描述】:

我能够创建一个密钥库,添加秘密,能够在 YouTube 上this tutorial 之后的屏幕上显示。唯一的问题是它只有在我部署到 azure 时才有效。而且,到目前为止,所有代码都假设我想部署到 azure。

我发现 this response to a Stackoverflow question 解释了如何在 VS Code 上执行此操作。问题是代码与我的不同,可能是因为我在使用 DotNet5.0 时在 2019 提出了这个问题。这是我的代码。它是由

创建的
  1. 进入互联服务

  2. 添加服务

  3. 按照向导选择 Key Vault。

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((context, config) =>
            {
                var keyVaultEndpoint = new Uri(Environment.GetEnvironmentVariable("VaultUri"));
                config.AddAzureKeyVault(
                keyVaultEndpoint,
                new DefaultAzureCredential());
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
    

每次我在本地运行它时,都会出现以下异常。

{"error":{"code":"Forbidden","message":"Access denied to first party service.
  Caller: name=from-infra;tid=f8cdef31-a31e-4b4a-93e4-5f571e91255a;
  appid=872cd9fa-d31f-45e0-9eab-6e460a02d1f1;
  ...
  "innererror":{"code":"AccessDenied"}}}

我已经运行了以下代码。

az keyvault set-policy --name 'myKeyvault' --object-id 872cd9fa-d31f-45e0-9eab-6e460a02d1f1 --secret-permissions get

在密钥保管库访问策略表中添加了以下行。

然而,当我尝试在本地运行应用程序时,我仍然遇到同样的错误。有没有我遗漏的步骤?

感谢您的帮助

【问题讨论】:

  • 我尝试了 youtube 教程提供的示例,它确实适用于 vs 代码。而且我还没有在vs code中登录任何帐户。这里很奇怪。
  • 你解决过这个问题吗?我正在与同样的事情作斗争。

标签: visual-studio asp.net-core azure-keyvault


【解决方案1】:

我曾经通过此示例收集 azure key vault 机密,我为我的租户中的用户添加了访问策略,该用户也用于登录 Visual Studio。这可能会有所帮助...

using System;
using System.Threading.Tasks;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;

namespace key_vault_test
{
    class Program
    {
        static async Task Main(string[] args)
        {
            const string secretName = "test0120";
            var kvUri = "https://fortest0120.vault.azure.net/";
            var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());

            var secret = await client.GetSecretAsync(secretName);
            Console.WriteLine($"Your secret is '{secret.Value.Value}'.");
        }
    }
}

在我看来,还有另一种获取秘密的选择,那就是使用key vault api,您需要做的是创建一个 azure 广告应用程序和密钥库的 api 权限,但是这个 api 只是具有委派权限,因此您只能使用密码流(身份验证码或 ropc)来生成访问令牌。这里你需要为你注册的应用和那些用户添加访问策略(如果有很多用户,最好是组,你可以将这些用户添加到一个组中)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多