在Azure上存储ASP.NET Core应用的密码的最佳方法

时间:2019-05-23 15:04:48

标签: c# azure asp.net-core azure-keyvault

我已经开发了一些应用程序,并且正在使用外部服务来发送电子邮件(SendGrid)。要使用此服务,我需要登录名和密码才能使用SendGrid api。在developermnet环境中,我使用了.Net Core机密(https://docs.microsoft.com/pl-pl/aspnet/core/security/app-secrets?view=aspnetcore-2.2&tabs=windows),但是现在发布后,我需要以其他方式传递登录名和密码。我知道有一个Azure Key Vault,但是如果将应用发布到其他地方怎么办?

1 个答案:

答案 0 :(得分:0)

用于生产::对Azure资源使用托管身份以避免存储连接字符串。这是一种用于管理Key Vault中机密信息的干净解决方案。

从不共享Key Vault或其他类似资源的访问密钥,甚至不共享给Services或DevOps Engineer在生产中部署或运行​​应用程序

  1. 创建一个Azure密钥保管库并存储您的秘密
  2. 在Azure应用服务中启用系统托管身份。它将在AAD内部注册您的Web应用程序
  3. 在Key Vault中搜索托管服务身份应用程序ID,并允许对其进行预期的访问
  4. 通过以下代码段初始化与您的Key Vault的连接

Program.cs

using Microsoft.Azure.Services.AppAuthentication;
using Microsoft.Azure.KeyVault;
using Microsoft.Extensions.Configuration.AzureKeyVault;

...

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((context, config) =>
        {
            if (context.HostingEnvironment.IsProduction())
            {
                var builtConfig = config.Build();

                var azureServiceTokenProvider = new AzureServiceTokenProvider();
                var keyVaultClient = new KeyVaultClient(
                    new KeyVaultClient.AuthenticationCallback(
                        azureServiceTokenProvider.KeyVaultTokenCallback));

                config.AddAzureKeyVault(
                    $"https://{builtConfig["KeyVaultName"]}.vault.azure.net/",
                    keyVaultClient,
                    new DefaultKeyVaultSecretManager());
            }
        })
        .UseStartup<Startup>();

Startup.cs

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }
}
  1. 现在,来自Key Vault的机密将被加载到Configuration变量中。您可以像Configuration [“ YourKeyVaultKeyName”]一样使用它。

用于开发::您可以选择使用 Dotnet-user-secrets 工具在本地计算机中存储/管理机密。