Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将ASP.NET核心用户机密部署到生产环境中_C#_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

C# 如何将ASP.NET核心用户机密部署到生产环境中

C# 如何将ASP.NET核心用户机密部署到生产环境中,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,我在开发过程中遵循了asp.net文档指南,但它没有描述在发布到另一台机器进行QA、生产等时如何使用它。我认为它可以在发布过程中将它们插入appsettings.json,但它没有。最后,我不得不将SendGrid密钥和其他敏感信息直接放入appsettings.json中,这实际上违背了应用程序机密的目的 使用应用程序机密是最好的方法还是有其他方法在我的配置中存储API密钥和SQL用户/密码?不要在生产中使用应用程序机密。曾经正如文章所说,在开发过程中 如何在生产中发布机密取决于您的生产环境。

我在开发过程中遵循了asp.net文档指南,但它没有描述在发布到另一台机器进行QA、生产等时如何使用它。我认为它可以在发布过程中将它们插入appsettings.json,但它没有。最后,我不得不将SendGrid密钥和其他敏感信息直接放入appsettings.json中,这实际上违背了应用程序机密的目的


使用应用程序机密是最好的方法还是有其他方法在我的配置中存储API密钥和SQL用户/密码?

不要在生产中使用应用程序机密。曾经正如文章所说,在开发过程中

如何在生产中发布机密取决于您的生产环境。Linux、Windows和Azure都支持环境变量——这就是您的秘密所在,使用托管提供商提供的任何UI

“为什么不在生产中使用应用程序机密”

将对此进行更详细的讨论。加密的秘密安全吗?对于应用程序配置来说,这是非常可以接受的,例如,您提到的用于密码恢复的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"];
        });
    }
公共启动(IConfiguration配置)
{
配置=配置;
var builder=new ConfigurationBuilder().AddUserSecrets();
Konfiguration=builder.Build();
}
公共IConfiguration配置{get;}
公共IConfiguration配置{get;}
public void配置服务(IServiceCollection服务)
....
services.AddSingleton();

服务。配置

我想您应该在第一次运行项目的每台计算机上重新创建它。只有当某个环境变量从链接设置为“开发”时,才会应用用户机密。机密管理器工具不会加密存储的机密,不应将其视为受信任的存储。它仅用于发展目的。这只是为了防止代码中的秘密被提交给您的回购协议。在生产环境中,将秘密值设置为appsettings或env变量或任何其他配置源。我只是不认为用户机密有什么价值,如果最终你不得不公开你为生产而存储它们的价值。如果它只在开发中有用,那么一旦开始生产,hec会做什么?@Sam对于生产,您通常会在构建或发布管道中进行价值替换。在azure devops中,它们有存储生产值的位置,这些值会在管道的发布步骤中得到回复。虽然不如部署配置文件那么简单,但我确实理解为什么您会使用环境变量。环境变量是存储机密的非常差的来源。本地管理员可以访问它们,这对许多环境都是危险的。如果可以使用密钥库,则至少应该以某种方式对机密进行加密。环境变量的安全性并不比将值存储在appsettings.json中更高。有权访问您的文件系统的黑客可以轻松访问这两个系统。那么,将值存储在环境变量中有什么意义呢?欢迎提供指向解决方案的链接,但请确保您的答案在没有它的情况下是有用的:这样您的其他用户就会知道它是什么以及为什么存在,然后引用您链接到的页面的最相关部分,以防目标页面不可用。此答案不正确,不应遵循。“只是从开发到生产过程中编译的副本,它就可以工作”真的很危险,应用程序的秘密是不加密的。请再次阅读已接受的答案。这对于回答用户对生产中的加密问题没有任何帮助。这是一个有效点。
    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);
        ....