安全存储敏感配置数据,例如连接字符串

时间:2016-08-04 17:29:19

标签: .net config

存储和使用敏感配置信息(如连接字符串)的最佳方法是什么。我曾经将它们存储在app.config,web.config中,现在作为纯文本存储在config.json中。这不安全,特别是在将这些文件检入公共可用的源代码控制时。存储此类数据并在应用程序中使用的最安全的方法是什么?

2 个答案:

答案 0 :(得分:1)

  

特别是在将这些文件检入公开可用的源代码管理时。

不要这样做。

完全将您的秘密设置放入配置文件中,因为您不想与全世界分享它们。将它们放在机器上的文件中是完全没问题的 - 人们会期望使用您的软件的人将他们的机器保存到某个点。

如果您无法信任您的用户,则需要将配置存储在您的计算机上,并为您的用户提供访问令牌(例如用户名和密码,或OAuth令牌)他们可以用来与你交谈,然后你保持安全和秘密。

答案 1 :(得分:1)

在我尝试过的一些事情之后,我找到的最佳解决方案是在Windows系统上使用环境变量。我不确定一旦部署到Azure后它将如何工作,但现在它正在按预期工作。在我的Startup.cs的ASP.NET Core中,我添加了AddEnvironmentVariables:

    public Startup(IHostingEnvironment appEnv)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(appEnv.ContentRootPath)
            .AddJsonFile("config.json")
            .AddEnvironmentVariables();


        Configuration = builder.Build();
    }

这是连接字符串:

enter image description here

消费它:

string connStr= Startup.Configuration["Data:WorldContextConnection"];

在这种情况下,我可以将每个文件检查到GitHub中,唯一的问题是我需要始终将这些环境变量添加到我将要处理的系统中。