При использовании DefaultAzureCredential веб-приложение пытается использовать ManagedIdentityCredential на локальном компьютере.
Я использую DefaulAzureCredential (Azure.Identity v1.2.3) для доступа к ресурсам в Azure. В Program.cs моего веб-приложения Asp.Net Core 3.1 я настроил доступ к хранилищу ключей Azure, как показано ниже:
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, builder) =>
{
var secretClient = new SecretClient(
new Uri("https://MyKeyVault.vault.azure.net/"),
new DefaultAzureCredential());
builder.AddAzureKeyVault(secretClient, new KeyVaultSecretManager());
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
Приведенный выше код работает должным образом на моем локальном компьютере, когда я отлаживаю исходный код из Visual Studio 2019, нажимая F5. Из документации MS (ссылка выше) я вижу, что DefaultAzureCredential попытается использовать различные учетные данные в следующем порядке: EnvironmentCredential, ManagedIdentityCredential, SharedTokenCacheCredential, VisualStudioCredential и т. Д. Я проверил, какие учетные данные использовал мой локальный компьютер разработчика, заменив DefaultAzureCredential на выше учетные данные:
.ConfigureAppConfiguration((context, builder) =>
{
var secretClient = new SecretClient(
new Uri("https://MyKeyVault.vault.azure.net/"),
new EnvironmentCredential());
builder.AddAzureKeyVault(secretClient, new KeyVaultSecretManager());
})
Вышеупомянутое быстро вызвало исключение: CredentialUnavailableException: EnvironmentCredential authentication unavailable. Переменные среды настроены не полностью.
Аналогичное исключение создается для ManagedIdentityCredential: CredentialUnavailableException: проверка подлинности ManagedIdentityCredential недоступна. Конечная точка управляемой идентификации не найдена.
Однако работали и SharedTokenCacheCredential, и VisualStudioCredential.
Теперь я думаю, что приведенное выше поведение правильное. Я не устанавливал необходимые переменные среды (такие как идентификатор клиента, идентификатор клиента и т. Д.), И я думаю, что ManagedIdentityCredential доступен только тогда, когда мое веб-приложение работает в среде Azure (см. Этот документ ).
Теперь о проблеме. На моем только что установленном компьютере я запустил свое веб-приложение из Visual Studio 2019, и оно не удалось: AuthenticationFailedException: Ошибка проверки подлинности ManagedIdentityCredential: Ошибка повторной попытки после 4 попыток.
Использование EnvironmentCredential приводит к тому же исключению, что и на моем старом компьютере, чего и следовало ожидать. Кроме того, использование SharedTokenCacheCredential и VisualStudioCredential работало так же, как на моем старом компьютере. Судя по описанию ошибки, на моем новом компьютере каким-то образом веб-приложение пытается использовать ManagedIdentityCredential и терпит неудачу. Что вызывает эту проблему?