我正在尝试使用Azure中的Manged Identity连接到我的Key Vault。为此,我在Vault下的KeyVault下的appsettings.json中添加了具有关键文件库名称的条目。我还对Program.cs进行了以下更改,基本上添加了类型为IConfiguration
的变量来帮助我阅读appsettings.json
和整个ConfigureAppConfiguration部分。
public IConfiguration Configuration { get; set; }
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(builder =>
{
// use Identity Management
var configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
var keyVaultUrl = string.Format("https://{0}.vault.azure.net/", configuration.GetSection("KeyVault").GetSection("Vault").Value);
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
builder.AddAzureKeyVault(keyVaultUrl, keyVaultClient, new DefaultKeyVaultSecretManager());
var secretValue = keyVaultClient.GetSecretAsync(keyVaultUrl, "MyApp-MyDatabaseSettings--MyDatabasePassword");
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
当我将鼠标悬停在secretValue上时,我得到的状态为WaitingForActivation
(而不是实际值),知道为什么吗?
编辑:我确实转到网络应用>身份>系统分配>,然后将其设置为开启。
我通过执行此操作使其工作:
var secretVal = Task.Run(async () => await keyVaultClient.GetSecretAsync(keyVaultUrl, "MyApp-MyDatabaseSettings--MyDatabasePassword")).Result.Value;
如果有人知道更好的方法,我将保持开放状态,以供其他答案使用。