Это намного проще с новым пакетом, как Azure .Security.KeyVault.Secrets. Вместе с Azure .Identity вы можете просто передать DefaultAzureCredential
, как в наших примерах .
var client = new SecretClient(
new Uri("https://myvault.vault.azure.net"),
new DefaultAzureCredential());
KeyVaultSecret secret = await client.GetSecretAsync("secret-name");
string authenticationKey = secret.Value;
. DefaultAzureCredential
оптимизирован для работы с управляемой идентификацией, принципалами службы из среды и интерактивных входов в систему для поддержки одного и того же кода, работающего как в рабочей среде, так и на компьютерах разработчиков. Новые библиотеки также быстрее с меньшим количеством выделенных ресурсов и имеют гораздо лучшую диагностику - по умолчанию включается при использовании Azure Application Monitor.
Они предназначены для netstandard2.0, поэтому должны быть совместимы со старыми пакетами, которые они заменяют. Вы могли бы обновить? Мы делаем критические исправления только для более старых пакетов и рекомендуем людям обновлять до Azure. * Пакетов для более старых пакетов Microosft. Azure. *.
Что касается самой проблемы, то это сложно сказать, не зная, когда вы звоните это в вашем приложении. Во время запуска? Какая версия. NET? Что вы используете для своего ASP. NET каркаса приложения?
Хотя это, вероятно, не является причиной проблемы, трудно игнорировать, что вы вызываете асинхронный метод c синхронно, что также может вызвать проблемы. Если вы используете асинхронный метод c, вы должны написать свой код следующим образом:
var secret = await keyVaultClient.GetSecretAsync(KeyVaultUrl);
authenticationKey = secret.Value;
Если нет, позвоните:
var secret = keyVaultClient.GetSecretAsnc(KeyVaultUrl).GetAwaiter().GetResult();
Однако это не рекомендуется. В новых пакетах, о которых я упоминал выше, у нас есть версии syn c и asyn c, которые либо syn c, либо asyn c на протяжении всего стека вызовов и безопаснее в использовании. Как правило, однако, вы должны использовать вызовы asyn c - особенно для сетевого трафика c, например, для доступа к Key Vault, потому что, в зависимости от того, какой поток вы вызываете, он может повесить ваш пользовательский интерфейс.