C# 在Azure上存储ASP.NET核心应用程序密码的最佳方法

C# 在Azure上存储ASP.NET核心应用程序密码的最佳方法,c#,azure,asp.net-core,azure-keyvault,C#,Azure,Asp.net Core,Azure Keyvault,我已经开发了一些应用程序,我正在使用一个外部服务发送电子邮件。要使用此服务,我需要登录名和密码才能使用SendGrid api。在developmnet环境中,我使用了.Net核心机密,但现在发布后,我需要以其他方式传递登录名和密码。我知道有一个Azure密钥库,但如果应用程序将发布到其他地方呢?对于生产:使用Azure资源的托管标识以避免存储连接字符串。这是一个干净的解决方案,用于管理密钥库中的机密 密钥库或其他类似资源的访问密钥永远不会共享,甚至不会共享给服务或DevOps工程师以在生产中部

我已经开发了一些应用程序,我正在使用一个外部服务发送电子邮件。要使用此服务,我需要登录名和密码才能使用SendGrid api。在developmnet环境中,我使用了.Net核心机密,但现在发布后,我需要以其他方式传递登录名和密码。我知道有一个Azure密钥库,但如果应用程序将发布到其他地方呢?

对于生产:使用Azure资源的托管标识以避免存储连接字符串。这是一个干净的解决方案,用于管理密钥库中的机密

密钥库或其他类似资源的访问密钥永远不会共享,甚至不会共享给服务或DevOps工程师以在生产中部署或运行应用程序

创建Azure密钥库并存储您的机密 在Azure应用程序服务中启用系统管理的标识。它将在AAD内部注册您的web应用程序 在密钥库中搜索托管服务标识应用程序ID,并允许对其进行预期访问 通过以下代码段初始化与密钥库的连接 Program.cs

现在,密钥库中的机密将加载到配置变量中。您可以像Configuration[YourKeyVaultKeyName]一样使用它。 对于开发:您可以选择使用Dotnet用户机密工具来存储\管理本地计算机中的机密。

对于生产:使用Azure资源的托管标识来避免存储连接字符串。这是一个干净的解决方案,用于管理密钥库中的机密

密钥库或其他类似资源的访问密钥永远不会共享,甚至不会共享给服务或DevOps工程师以在生产中部署或运行应用程序

创建Azure密钥库并存储您的机密 在Azure应用程序服务中启用系统管理的标识。它将在AAD内部注册您的web应用程序 在密钥库中搜索托管服务标识应用程序ID,并允许对其进行预期访问 通过以下代码段初始化与密钥库的连接 Program.cs

现在,密钥库中的机密将加载到配置变量中。您可以像Configuration[YourKeyVaultKeyName]一样使用它。
用于开发:您可以选择使用Dotnet用户机密工具在本地计算机中存储\管理机密。

选项取决于您部署应用程序的方式以及使用的Azure服务。我们只使用环境变量,并通过asp.net核心选项读取它们。您只需在AAD中注册一个应用程序,授予它访问密钥库的权限。然后,您可以从应用程序中获取密钥。请检查此选项,这取决于您部署应用程序的方式以及您使用的Azure服务。我们只使用环境变量,并通过asp.net核心选项读取它们。您只需在AAD中注册一个应用程序,授予它访问密钥库的权限。然后,您可以从应用程序中获取密钥。请检查这篇评论:我知道有一个Azure密钥库,但若该应用程序将在其他地方发布呢?。这个答案似乎不适用?@DouglasGaskell,哦,我明白了。我在问题中没有注意到。OP说:我知道有一个Azure密钥库,但如果该应用程序将在其他地方发布呢?。这个答案似乎不适用?@DouglasGaskell,哦,我明白了。我没有注意到这个问题。
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>();
public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }
}