【问题标题】:How to pass sensitive data to the IConfiguration interface during startup?启动时如何将敏感数据传递给IConfiguration接口?
【发布时间】:2020-07-26 11:22:31
【问题描述】:

我想为我的 .NET Core Web API 使用配置设置。我为 DI 容器安装了 Microsoft.Extensions.Configuration 包。

首先我有 4 个配置文件

  • appsettings.json

    当所有三个环境使用相同的配置值时,这就是放置它的文件

  • appsettings.Development.json

    仅用于开发目的的基本配置值。例如。数据库连接指向本地主机,令牌秘密是“秘密”,例如:

.

{
  "Database": {
    "ConnectionString": "Server=localhost;Port=3306;Database=db;Uid=root;Pwd=admin;Pooling=true;"
  }
}
  • appsettings.Staging.json

    和开发文件差不多

  • appsettings.Production.json

    这里的情况有所不同。我不能将敏感信息放入该文件,例如令牌秘密。这些值应该来自环境变量

所以在我的代码中,我可以通过依赖注入访问配置值

public class MyClass
{
    public MyClass(IConfiguration configuration)
    {
        string databaseConnectionString = configuration["Database:ConnectionString"];
    }
}

但是如果代码在生产模式下运行呢?生产文件中不存在该信息,因此我必须从环境变量中读取。

我是否必须创建一个名为 Database:ConnectionString 的环境变量,如果 .NET Core 在启动期间将所有系统环境变量映射到配置文件中(如果它们不存在)?或者我如何将敏感数据传递给配置?

【问题讨论】:

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


【解决方案1】:

使用默认构建器,ASP.NET Core 将从多个源加载配置,之后的源有机会覆盖之前的源。非开发环境中的默认来源如下:

  • 来自appsettings.json 的常规 JSON 配置
  • 来自appsettings.<Environment>.json 的特定于环境的 JSON 配置
  • 环境变量,例如ConnectionStrings:DefaultConnectionConnectionStrings__DefaultConnection(都映射到相同的配置路径)
  • 命令行参数

因此,默认情况下,您可以使用环境变量和命令行参数覆盖 JSON 文件中的配置。

在生产使用方面,还有其他方法可以保护机密。例如,您可以在部署期间简单地编辑appsettings.Production.json,这样这些值就不会离开机器本身。

【讨论】:

  • 所以对于生产部分,我可以创建一个名为Database__ConnectionString 的环境变量,代码将能够通过configuration["Database:ConnectionString"] 访问它?
【解决方案2】:

对此有多种解决方案。但显然您希望将连接字符串等内容远离版本控制文件。

如果在本地运行,我建议在 Visual Studio 中使用 user secrets 功能。

但是,您也可以从 cli 设置环境变量。这是来自documentation about configuration 的示例:

set MyKey="My key from Environment"
set Position__Title=Environment_Editor
set Position__Name=Environment_Rick
dotnet run

当然,在 azure 中运行时,key vault 是放置这些秘密的好地方,并且可以很好地集成到 .Net。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-10
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    相关资源
    最近更新 更多