保护ASP.NET Core应用程序中的
appsettings.json
文件是至关重要的,特别是当其中包含敏感数据,如数据库连接字符串、API密钥或其他秘密值时。出于安全原因,不建议将敏感配置设置以明文形式存储在
appsettings.json
文件中。以下是一些保护这些设置的方法:
环境变量
管理敏感配置的最简单方法之一是使用环境变量。与配置文件不同,环境变量易于在部署之间进行更改,而无需更改任何代码。
export MySensitiveData="MyValue"
你可以在代码中像这样访问它:
var mySensitiveData = Configuration["MySensitiveData"];
用户机密(仅用于开发)
ASP.NET Core提供了一个名为“用户机密”的功能,仅用于开发环境。这使开发人员能够存储和检索敏感数据,而不会将数据添加到源代码控制中。
dotnet user-secrets set "MySensitiveData" "MyValue"
要启用用户机密,您需要在您的
csproj
文件中添加对用户机密ID的引用。
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UserSecretsId>your-user-secrets-id-here</UserSecretsId>
</PropertyGroup>
...
</Project>
Azure Key Vault
如果您在Azure上部署应用程序,您可以利用Azure Key Vault来存储秘密、密钥和证书。
首先,添加必要的NuGet包:
dotnet add package Microsoft.Extensions.Configuration.AzureKeyVault
然后,在你的
Program.cs
中修改配置,将Azure Key Vault包含进去。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.ConfigureAppConfiguration((context, config) =>
{
if (context.HostingEnvironment.IsProduction())
{
var builtConfig = config.Build();
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
config.AddAzureKeyVault(
builtConfig["AzureKeyVault:BaseUrl"],
keyVaultClient,
new DefaultKeyVaultSecretManager());
}
});
加密
当您将敏感数据读回应用程序时,您可以对其进行加密和解密。这更复杂,需要您管理加密密钥。
第三方工具
许多第三方工具和库,例如HashiCorp的Vault,可以安全地管理应用程序的机密信息。
文件权限
确保您用于存储机密信息的文件或服务具有适当的文件权限,以防止未经授权的访问。
永远不要将机密信息存储在源代码中
这是不言而喻的,但永远不要将敏感数据存储在您的源代码或版本控制系统中。
通过使用这些方法中的一个或多个组合,您可以提高ASP.NET Core中敏感设置的安全性。