微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 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 举报,一经查实,本站将立刻删除。