如何将ASP.NET Core UserSecrets部署到生产环境

时间:2016-09-23 19:44:57

标签: asp.net-core asp.net-core-mvc

我在开发过程中遵循了Safe storage of app secrets during development指南,但是没有描述如何在发布到另一台QA,Production等机器时使用它。我认为它会做的是插入他们在发布期间进入appsettings.json,但事实并非如此。我最终不得不将我的SendGrid密钥和其他敏感信息直接放入appsettings.json,这实际上违背了应用程序机密的目的。

使用app secret是最好的方法还是在我的配置中有另一种方法来存储API密钥和SQL用户/密码?

2 个答案:

答案 0 :(得分:14)

请勿在制作中使用应用机密。永远。正如文章所述,在开发期间。

如何在生产中发布秘密取决于您的生产环境。 Linux,Windows和Azure都支持环境变量 - 这是您的秘密应该去的地方,使用您的托管服务提供商为您提供的任何UI。

app settings documentation更详细地讨论了这个问题

答案 1 :(得分:1)

为什么“在生产中不使用应用程序机密”。加密的机密安全吗?这对于应用程序配置是非常可接受的,例如,您提到的用于密码恢复的SendGrid。它是服务器中的所有配置秘密吗?为什么要禁止?只需将编译后的内容从开发复制到生产中即可。

Startup.cs

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
        var builder = new ConfigurationBuilder().AddUserSecrets<Startup>();
        Konfiguration = builder.Build();
    }

    public IConfiguration Configuration { get; }

    public IConfiguration Konfiguration { get; }

    public void ConfigureServices(IServiceCollection services)
           ....
        services.AddSingleton<IEmailSender, EmailSender>();
        services.Configure<AuthMessageSenderOptions>(Configuration);
        if (Configuration["SendGridKey"] != null)
            return;
        // linux'e secrets.json nenuskaitomas
        services.Configure<AuthMessageSenderOptions>(options => {
            options.SendGridKey = Konfiguration["SendGridKey"];
            options.SendGridUser = Konfiguration["SendGridUser"];
        });
    }

HomeController.cs

    private readonly IOptions<AuthMessageSenderOptions> _optionsAccessor;

    public HomeController(..., IOptions<AuthMessageSenderOptions> optionsAccessor)
    {
        ...
        _optionsAccessor = optionsAccessor;
    }

    public IActionResult Index(...)
    {
        if (_optionsAccessor.Value.SendGridUser != null)
            ModelState.AddModelError("", _optionsAccessor.Value.SendGridUser);
        ....

继续进行“启用帐户确认和密码恢复” https://docs.microsoft.com/en-us/aspnet/core/security/authentication/accconfirm?view=aspnetcore-2.1&tabs=visual-studio#configure-email-provider