Rya*_* E. 2 asp.net azure azure-keyvault
我想知道是否有一种方法可以设置 .net mvc 应用程序,就像可以使用 Key Vault 设置 .net 核心应用程序一样。
我希望能够在我的本地开发环境中提取机密,而无需预配 Azure Key Vault。
在 .net 核心应用程序中,我能够按照上面的链接进行操作并使一切正常。
// ran this command in powershell
dotnet user-secrets set "db-connection-string" "db-connection-string-value"
Run Code Online (Sandbox Code Playgroud)
在 Program.cs 中使用空终结点设置密钥保管库(这仅用于测试)。
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((ctx, builder) =>
{
var keyVaultEndpoint = GetKeyVaultEndpoint();
if (!string.IsNullOrEmpty(keyVaultEndpoint))
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
builder.AddAzureKeyVault(
keyVaultEndpoint, keyVaultClient, new DefaultKeyVaultSecretManager());
}
}
).UseStartup<Startup>()
.Build();
private static string GetKeyVaultEndpoint() => "";
Run Code Online (Sandbox Code Playgroud)
我可以使用以下代码在本地访问我的秘密。
public void OnGet()
{
Message = "My key val = " + _configuration["db-connection-string"];
}
Run Code Online (Sandbox Code Playgroud)
在我的 asp.net 应用程序中,我能够从 Azure Key Vault 中提取机密。我只是不想在本地开发时这样做,因为每个开发人员的本地数据库连接字符串可能略有不同,并且要求他们在 Azure 中使用 Key Vault 会很烦人并导致沮丧。也许我们不应该将 Key Vault 用于“遗留”应用程序。任何帮助表示赞赏。
这似乎与我们的开发环境相似。
我们希望开发人员使用密钥保管库中的某些值,但能够覆盖其本地环境的特定值。(特别是数据库连接字符串)。
在该ConfigureAppConfiguration方法中,您可以注册多个配置提供程序。如果两个配置提供程序写入相同的配置键,则最后注册的提供程序优先。
知道了这一点,你可以有一个本地文件appSettings.json,它定义了数据库连接字符串:
{
"db-connection-string": "Data Source = DEVELOPMENT_PC;Initial Catalog=MyLocalDatabase;Integrated Security=True"
}
Run Code Online (Sandbox Code Playgroud)
然后在注册 Key Vault 提供程序后注册此提供程序。
.ConfigureAppConfiguration((ctx, builder) =>
{
var keyVaultEndpoint = GetKeyVaultEndpoint();
if (!string.IsNullOrEmpty(keyVaultEndpoint))
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback
)
);
builder.AddAzureKeyVault(
keyVaultEndpoint,
keyVaultClient,
new DefaultKeyVaultSecretManager()
);
}
var appSettingsFilePath = GetJsonAppSettingsFile(); // Hardcoded, or add some other configuratin logic
if (!string.IsNullOrEmpty(appSettingsFilePath))
{
builder.AddJsonFile(appSettingsFilePath);
}
}
Run Code Online (Sandbox Code Playgroud)
很明显,生产环境会有一个空的或不存在的appSettings.json文件,所有的值都会从密钥库中导出。或者,您appSettings.json在生产环境中使用该文件,但仅用于不包含机密的配置值。
| 归档时间: |
|
| 查看次数: |
2765 次 |
| 最近记录: |