使用 DefaultAzureCredential 时,Web 应用程序尝试在本地计算机上使用 ManagedIdentityCredential

问题描述

我正在使用 DefaulAzureCredential (Azure.Identity v1.2.3) 访问 Azure 上的资源。在我的 Asp.Net Core 3.1 Web 应用程序的 Program.cs 中,我配置了 Azure Key Vault 访问,如下所示:

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>();
        });
}

当我通过按 F5 从 Visual Studio 2019 调试源代码时,上述代码在我的本地计算机上按预期工作。 从 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 身份验证不可用。环境变量未完全配置。

ManagedIdentityCredential 引发类似异常:CredentialUnavailableException:ManagedIdentityCredential 身份验证不可用。未找到托管身份端点。

但是,SharedTokenCacheCredential 和 VisualStudioCredential 都有效。

现在,我认为上述行为是正确的。我没有设置所需的环境变量(例如租户 ID、客户端 ID 等),而且我认为 ManagedIdentityCredential 仅在我的 Web 应用程序在 Azure 环境中运行时才可用(请参阅 this doc)。

现在关于这个问题。在我新安装的计算机上,我从 Visual Studio 2019 中运行了我的 Web 应用程序,但它失败了:AuthenticationFailedException:ManagedIdentityCredential 身份验证失败:4 次尝试后重试失败。

使用 EnvironmentCredential 会导致与我的旧计算机相同的异常,这是预期的。此外,使用 SharedTokenCacheCredential 和 VisualStudioCredential 就像在我的旧计算机上一样工作。根据错误描述,我认为,在我的新计算机上,Web 应用程序以某种方式尝试使用 ManagedIdentityCredential 并失败。导致此问题的原因是什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)