【问题标题】:On-prem ASP.NET Framework web app with Azure Key Vault带有 Azure Key Vault 的本地 ASP.NET Framework Web 应用
【发布时间】:2020-10-14 02:26:29
【问题描述】:

我们正在尝试保护我们内部 ASP.NET Framework Web 应用程序中的应用程序机密。提供给我的最初计划是使用 Azure Key Vault。我使用我的 Visual Studio Enterprise 订阅开始了开发工作,这似乎在本地运行良好。

我们在公司的生产环境中创建了第二个 Key Vault,我可以再次在本地使用它,因为我自己的 AAD 帐户可以访问该保管库。但是,在这个项目(4.7.2 Web Forms Web 应用程序)中,我看不到任何指定我们为应用程序创建的访问策略主体的方法。

我的 google-fu 让我失望了:是否有任何文档说明如何执行此操作?这种场景——Azure 环境之外的本地 ASP.NET Framework 应用程序,访问 Key Vault 以获取配置值——是否可能?

谢谢。

更新:我找不到允许我从“添加连接的服务”对话框中使用访问策略主体的解决方案。我有点惊讶它不在那里,或者隐藏得足以躲避我。所以我最终编写了自己的 Key Vault Secret-Reader 函数,类似于标记的答案。希望这对某人有所帮助...

【问题讨论】:

  • @JoyWang:已更新。我什么也没找到。我正在使用下面标记答案的代码。

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


【解决方案1】:

在这种情况下,您的选择是使用服务主体访问密钥库,请按照以下步骤操作,我的示例从密钥库中获取密钥。

1.Register an application with Azure AD and create a service principal.

2.Get values for signing increate a new application secret

3.导航到门户中的密钥库 -> Access policies -> 为服务主体添加正确的秘密权限。

4.然后使用下面的代码,将<client-id><tenant-id><client-secret>替换为之前得到的值。

using System;
using Microsoft.Azure.KeyVault;
using Microsoft.Azure.Services.AppAuthentication;

namespace test1
{
    class Program
    {
        static void Main(string[] args)
        {
            var azureServiceTokenProvider = new AzureServiceTokenProvider("RunAs=App;AppId=<client-id>;TenantId=<tenant-id>;AppKey=<client-secret>");
            var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
            var secret = kv.GetSecretAsync("https://keyvaultname.vault.azure.net/", "mySecret123").GetAwaiter().GetResult();
            Console.WriteLine(secret);

        }
    }
}

【讨论】:

  • 我希望使用“添加连接的服务”对话框自动完成,但这看起来是最好的解决方案。
猜你喜欢
  • 2021-08-23
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
  • 2021-10-11
  • 1970-01-01
  • 2023-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多