首页 > 解决方案 > 启动时如何将敏感数据传递给IConfiguration接口?

问题描述

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

首先我有4个配置文件

.

{
  "Database": {
    "ConnectionString": "Server=localhost;Port=3306;Database=db;Uid=root;Pwd=admin;Pooling=true;"
  }
}

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

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

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

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

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

解决方案


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

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

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

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


推荐阅读