Причиной сбоя вашей конфигурации является то, что обратный вызов теперь async void
.
Это не очевидно из взгляда на лямбду, но это эффективно огонь и забыть.
Когда вы ожидаете клиента хранилища ключей, он возвращается из обратного вызова без настройки поставщика.
Что касается решения, я думаю, что лучше добавить секретные хранилища ключей в систему конфигурации, чтобы вы могли использовать их оттуда, как если бы они пришли из файла JSON или из любого другого источника.
Я недавно написал статью об этом: https://joonasw.net/view/aspnet-core-azure-keyvault-msi.
Я использовал управляемую идентификацию для аутентификации в своей статье, но я вижу, что вы тоже используете ее:)
Вот пример того, как вы можете настроить Key Vault в качестве источника конфигурации в ASP.NET Core 2.x:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureAppConfiguration((ctx, builder) =>
{
//Build the config from sources we have
var config = builder.Build();
//Add Key Vault to configuration pipeline
builder.AddAzureKeyVault(config["KeyVault:BaseUrl"]);
})
.Build();
Пример, который я привел в этой статье, на самом деле немного слишком многословен, так как он будет использовать AzureServiceTokenProvider внутри для получения токенов.
Вам потребуется Microsoft.Extensions.Configuration.AzureKeyVault , чтобы получить поставщик конфигурации для хранилища ключей.
Секретное наименование в Key Vault будет иметь значение.
Например, мы переопределим следующую строку подключения:
{
"ConnectionStrings": {
"DefaultConnection": "..."
}
}
Вам потребуется создать секрет с именем ConnectionStrings - DefaultConnection со строкой подключения в качестве значения.
Тогда при настройке вы просто используете Configuration["ConnectionStrings:DefaultConnection"]
, чтобы получить строку подключения.
Он будет получен из хранилища ключей, если будет добавлена конфигурация хранилища ключей и найден секрет с правильным именем.