我正在尝试使用Azure Key Vault进行一项业余项目。最初,我是在本地开发的,但是现在我的数据库在Azure中。因此,我希望此连接字符串在Key Vault中安全。我设法通过Visual Studio中的连接服务选项进行操作。建立连接,一切正常。 仍然,现在我想在开发中使用来自appsettings.json的config值访问本地数据库。我认为,通过将设置包装在program.cs中的ConfigureAppConfiguration委托中,如下所示将绕过Key Vault并转到本地appsettings。但是在运行此代码时,我仍然会获得Key Vault的机密值(并且在调试时,代码会被跳过(因此IsDevelopment为true)
if (!context.HostingEnvironment.IsDevelopment())
{
var builtConfig = config.Build();
var keyVaultEndpoint = GetKeyVaultEndpoint();
if (!string.IsNullOrEmpty(keyVaultEndpoint))
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
config.AddAzureKeyVault(
keyVaultEndpoint, keyVaultClient, new DefaultKeyVaultSecretManager());
}
}
我的问题是
答案 0 :(得分:0)
为此,我通常不使用Program
类中的Hosting环境,而使用环境变量。由于密钥库可能会更改,因此我将密钥库存储为生产环境变量。我现在可以将函数定义为:
string GetKeyVaultEndpoint() => Environment.GetEnvironmentVariable("KeyVaultURL");
此处“ KeyVaultURL”是存储URL端点的环境变量名称。这样定义函数后,您只需检查它是否返回null。如果返回null,则可以跳过密钥库设置。这样,即使您将网站移动到选择使用其他方式(而不是密钥库)的位置,即使在生产环境中也不会出现问题。
答案 1 :(得分:0)
事实证明,这毕竟不是代码和密钥库。在实施密钥库之前,我已经尝试了用户机密,结果仍然可以在我的配置提供程序中执行。调试时,我查看了IConfiguration.Providers的内容,发现我的设置存在于计算机上的secrets.json中。
C:\Users\Username\AppData\Roaming\Microsoft\UserSecrets\e53d8827-fdcb-496d-8290-9ff7fcf0ec04
我希望其他有此问题的人可以免于挖掘代码