asp.net-core - 启动时如何将敏感数据传递给IConfiguration接口?
问题描述
我想为我的 .NET Core Web API 使用配置设置。我为 DI 容器安装了Microsoft.Extensions.Configuration包。
首先我有4个配置文件
应用设置.json
每当所有三个环境使用相同的配置值时,这就是放置它的文件
appsettings.Development.json
仅用于开发目的的基本配置值。例如,数据库连接指向 localhost 并且令牌秘密是“秘密”,例如:
.
{
"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 将从多个源加载配置,之后的源有机会覆盖之前的源。非开发环境中的默认源如下:
- 通用 JSON 配置来自
appsettings.json
- 环境特定的 JSON 配置来自
appsettings.<Environment>.json
- 环境变量,例如
ConnectionStrings:DefaultConnection
或ConnectionStrings__DefaultConnection
(都映射到相同的配置路径) - 命令行参数
因此,默认情况下,您可以使用环境变量和命令行参数覆盖 JSON 文件中的配置。
在生产使用方面,还有其他方法可以保护机密。例如,您可以appsettings.Production.json
在部署期间简单地编辑,以便这些值永远不会离开机器本身。
推荐阅读
- image - Vue降价图像不显示
- npm - 如何在 dart 代码中使用 npm 包?
- r - 通过 R Bloomberg API 检索以文本形式存储的历史数据
- c# - 在 .net 中配置quartz.net 调度程序
- angular - Cypress 在取消归档缓存时使用 CircleCI 2.0 失败并且权限被拒绝
- c# - Windows 窗体应用程序的 Windows 10 和 8 吐司通知
- rust - 与 Vec 相比,为什么 SmallVec 在存储具有生命周期的类型时会有不同的行为?
- docker - 对于 biz_wacore_1 无法启动服务 wacore:OCI 运行时创建失败:container_linux.go:345:正在启动
- google-apps-script - 使 VSCode 语法突出显示接受 Google Apps Script Scriptlets
- azure - 用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。- MSI(托管身份)