使用应用程序客户端机密访问azure密钥保管库机密



问题语句:在web/console c#应用程序中以编程方式检索和使用存储在azure密钥库中的敏感值(比如数据库连接字符串(。

我知道你可以在AAD中注册一个应用程序,并使用其客户端id和客户端机密以编程方式生成一个广告令牌,该令牌可用于调用/访问azure密钥库机密。

我感到困惑的是,客户端机密本身是一个敏感的"密码",您希望将其存储在密钥库中。一旦有人知道了客户的秘密,他们就可以访问密钥库中的所有秘密。那么,创建一个新的秘密(客户端秘密(来存储和访问原始秘密有什么意义呢?(有人能解释一下背后的逻辑吗?谢谢!

这是引导的问题。你如何在不使用秘密的情况下访问秘密商店?

如果你在Azure中运行你的应用程序,答案很简单。使用托管身份。

如果未在Azure中运行,交互式应用程序可以代表当前用户访问密钥保管库。这确实要求用户有权访问密钥库机密。

另一种方法是使用证书而不是客户端机密。

如果您在Azure上托管应用程序,则可以使用托管身份在服务之间执行身份验证。Azure配置完成后,您需要在应用程序中添加以下内容:它只需要存储Azure KeyVault URI,因为env变量会更好。

以下代码将Azure KeyVault与AppConfiguration一起使用,因此本地appsettings.json文件为空:

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureAppConfiguration((hostingContext, configBuilder) =>
{
if (hostingContext.HostingEnvironment.IsDevelopment()) return;
AddAzureKeyVault(configBuilder);
var configRoot = configBuilder.Build();
AddAzureAppConfiguration(configBuilder, configRoot);
});
webBuilder.UseStartup<Startup>();
});
private static void AddAzureKeyVault(IConfigurationBuilder configBuilder)
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
configBuilder.AddAzureKeyVault(
$"https://{keyVaultName}.vault.azure.net/",
keyVaultClient,
new DefaultKeyVaultSecretManager());
}
private static void AddAzureAppConfiguration(IConfigurationBuilder configBuilder, IConfigurationRoot configRoot)
{
var appConfigName = configRoot["AppConfiguration-Name"];
configBuilder.AddAzureAppConfiguration(appConfigName);
}

相关内容

  • 没有找到相关文章

最新更新