Rus*_*kin 5 c# config appsettings azure azure-keyvault
尝试从 C# 应用服务中的 KeyVault 检索机密。
Visual Studio > 工具 > 选项 > Azure 服务身份验证 - 经过身份验证的 Azure 帐户
可能az login
在您使用 vs code 等的 shell 中使用dotnet run
。未检查。
System Assigned
...
"KeyVaultName" : "abc123",
"Secrets": {
"One" : "@Microsoft.KeyVault(Secreturi=[uri to secret copied from Azure blade])"
}
...
Run Code Online (Sandbox Code Playgroud)
...
using Azure.Extensions.AspNetCore.Configuration.Secrets;
using Azure.Identity;
...
public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
var builtConfig = config.Build();
var secretClient = new SecretClient(
new Uri($"https://{builtConfig["KeyVaultName"]}.vault.azure.net/"),
new DefaultAzureCredential());
config.AddAzureKeyVault(secretClient, new KeyVaultSecretManager());
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
Run Code Online (Sandbox Code Playgroud)
我刚刚获得了@Microsoft ...
我期望映射到 keyvault 中的值的值。
似乎有些不对劲,因为我必须定义 keyvault 的名称两次,一次在 SecretClient 中,一次在 @Microsoft.KeyVault 引用中。
看来我混合了两种从 KeyVault 获取秘密的方法。
我添加的Program.cs
是一个配置提供程序,它将机密映射到配置集合中。放置断点Startup.cs
并检查配置集合中的值验证了这一点。
我应该做的就是命名秘密Secret--One
,它将映射并覆盖本地配置值{ "Secret: { "One" : "..." } }
。无法在环境变量配置映射中使用:
或__
使用,因为秘密名称中不支持这些字符。
感觉我仍然缺少一些东西,所以请在评论或其他答案中更新。
另一方面,如果您想要使用 Azure 应用程序设置(应用服务配置)边栏选项卡上设置的环境变量覆盖配置值,则可以使用 KeyVault 引用。
这样做的问题是,您仍然需要另一种方法来确保您不会在本地保守秘密并冒着将其提交给源代码控制的风险。
有关此方法的更多信息,请参阅Enrico 的回答。
归档时间: |
|
查看次数: |
19771 次 |
最近记录: |