【发布时间】:2022-11-04 20:46:58
【问题描述】:
我想先提一下。我浏览了其他博客以找到答案,但我无法得到我正在寻找的问题的明确答案。
我在运行时从 Azure AD 获取存储连接字符串的 Key Vault 机密。我当前的程序具有硬编码的连接字符串,但它必须更改并且需要从 keyvault 机密更新。我能够以编程方式从 Azure 获取连接字符串。关键是我应该如何在配置文件中更新,以便每个应用程序只运行一次。
我的问题的目的是了解在运行时更新连接字符串的最佳做法以及如何做到这一点。正如我目前提到的,它在 webconfig 文件中是硬编码的,因此在不干扰 webconfig 文件中更新它的大部分代码的情况下,这对我来说是有好处的,但是,如果这不是一个好主意,那么有什么替代方案呢? 如果提供基于 ASP.Net MVC 4.xx 将受到高度赞赏的代码示例,我正在使用 ASP.Net MVC 4.8 。
在 MVC 中获取秘密的代码。假设秘密已被创建。
public string ViewDataWithKeyVault()
{
var AzureKeyVaultName = "MyDbConnectionString";//get this from app settings. You can pass it as param to this method
var secretClient = new SecretClient(new Uri($"https://{AzureKeyVaultName}.vault.azure.net/"), new DefaultAzureCredential());
var secretVaults = secretClient.GetPropertiesOfSecrets().AsPages().ToList();
var listName = new List<string>();
string keyVaultName = "";
foreach (var sV in secretVaults)
{
var keyVaultProp = sV.Values;
foreach (var prop in keyVaultProp)
{
listName.Add(prop.Name);
if (prop.Name.ToLower().Contains("mydb"))
{
keyVaultName = prop.Name;
}
}
}
var sec = secretClient.GetSecret(keyVaultName);
var connstring = sec.Value.ToString();
return connstring;
}
谢谢
【问题讨论】:
标签: asp.net-mvc-4 azure-devops azure-keyvault