使用 DefaultAzureCredential 时,网络应用会尝试在本地计算机上使用 ManagedIdentityCredential

问题描述 投票:0回答:1

我正在使用 DefaulAzureCredential (Azure.Identity v1.2.3) 来访问 Azure 上的资源。在我的 Asp.Net Core 3.1 Web 应用程序的 Program.cs 中,我配置了 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>();
        });
}

当我通过按 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 authentication unavailable。环境变量没有配置好

ManagedIdentityCredential 抛出类似的异常:CredentialUnavailableException:ManagedIdentityCredential 身份验证不可用。找不到托管身份终结点。

但是,SharedTokenCacheCredential 和 VisualStudioCredential 都有效。

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

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

使用 EnvironmentCredential 会导致与我的旧计算机相同的异常,这是预期的。此外,同时使用 SharedTokenCacheCredential 和 VisualStudioCredential 就像在我的旧计算机上一样。从错误描述来看,我认为,在我的新计算机上,网络应用程序以某种方式尝试使用 ManagedIdentityCredential 但失败了。是什么导致了这个问题?

c# azure asp.net-core azure-sdk-.net microsoft-identity-web
1个回答
0
投票

你有没有在本地机器上安装 Azure Arc 代理?

这将创建一个托管服务器身份,

DefaultAzureCredential
将尝试使用它。

代理将安装在 Program Files\AzureConnectedMachineAgent 中并设置这些环境变量:

IMDS_ENDPOINT=http://localhost:40342 IDENTITY_ENDPOINT=http://localhost:40342/metadata/identity/oauth2/token

https://learn.microsoft.com/en-us/azure/azure-arc/servers/managed-identity-authentication

© www.soinside.com 2019 - 2024. All rights reserved.