【问题标题】:adding placeholder variables to the appSettings.json file将占位符变量添加到 appSettings.json 文件
【发布时间】:2020-05-29 10:13:55
【问题描述】:

因此,在生成新的 .NET Core Web 项目时,有一个 appSettings.jsonappSettings.Development.json 用于配置部分。默认情况下,.gitignore 文件不会忽略这些内容,因此我认为它们应该保留在存储库中。

我正在使用数据库并希望将我的连接字符串存储到这些文件中。显然,参数包含敏感信息,不应在存储库中。如果环境是开发环境,我可以将本地连接字符串添加到 appSettings.Development.json (但是在我将开发文件添加到 .gitignore 之前,每个开发人员都必须使用相同的设置)

"Database": {
    "Server": "localhost",
    "Port": 5432,
    "UserId": "admin",
    "Password": "admin",
    "Name": "myDb"
}

如何设置 appSettings.json 用于生产或其他用途?有没有办法像

"Database": {
    "Server": "$DB_SERVER",
    "Port": "$DB_PORT",
    "UserId": "$DB_USER_ID",
    "Password": "$DB_PASSWORD",
    "Name": "$DB_NAME"
}

这些占位符会被环境变量中的值替换吗?

【问题讨论】:

  • 您可以应用配置转换。或者您可以访问您的配置值,例如 Database__Server 环境变量

标签: c# asp.net-core .net-core


【解决方案1】:

如果您在源代码管理中包含任何类型的敏感信息(如生产连接字符串),它们通常会被视为已泄露。

你有两个选择:

第一个选项将是去应用程序设置文件覆盖值。所有已建立的 CI/CD 工具都支持它。该步骤通常发生在部署之前的发布管道中。在这种情况下,您将加密的值存储在 CD 工具中。

第二个选项是使用环境变量。在这种情况下,出于开发目的,您可以在 launchSettings.json 文件中传递此变量。然后在运行应用程序的服务器中设置环境变量的值。

如果您想使用环境变量,则不需要在 appsettings 文件中使用占位符。您可以直接阅读它们

Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT ")

【讨论】:

  • 感谢您的代码示例,正是我想要的:)
【解决方案2】:

使用secret

它们将配置保存在本地文件中,因此它们不在存储库中。 当您投入生产时,将此信息保存在环境变量中。

在 Project 的 Visual Studio 中,选择管理用户密码并添加您的连接

{
 "ConnectionStrings": {
   "MyConnection": "the connection"
}

在启动时使用 IConfiguration

configuration.GetConnectionString("MyConnection")

在生产环境中,在服务器的 EnvironmentVariable 中保存一个新的 EnvironmentVariable

ConnectionStrings:MyConnection

所以只有管理员知道连接。 如果您使用 Azure,则可以使用 Azure 密钥保管库。

【讨论】:

    猜你喜欢
    • 2021-02-13
    • 2014-11-24
    • 2012-01-03
    • 1970-01-01
    • 2018-11-27
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多