【发布时间】:2022-06-16 15:44:43
【问题描述】:
我正在尝试使用DefaultAzureCredential 使用以下代码连接到托管在 Azure 中的密钥保管库:
using System;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Configuration; // Azure.Extensions.AspNetCore.Configuration.Secrets 1.2.2
using Azure.Identity; // Azure.Identity 1.6.0
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(builder =>
{
Uri keyVaultUrl = new(builder.Build().GetSection("keyVaultUrl").Value);
DefaultAzureCredentialOptions options = new() { ExcludeEnvironmentCredential = true, ExcludeSharedTokenCredential = true };
builder.AddAzureKeyVault(keyVaultUrl, new DefaultAzureCredential(options));
})
.ConfigurationWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
当我的 Web 应用程序发布到 Azure 并成功使用我设置的系统托管标识时,代码运行良好,但在本地运行时遇到以下异常:
Azure.Identity.AuthenticationFailedException: 'ManagedIdentityCredential 身份验证失败。托管身份响应不是预期的格式。有关详细信息,请参阅内部异常。
状态:403(全局块)
内部异常显示:
'
我了解托管身份不会在本地工作,但我认为使用 DefaultAzureCredential 的目的是回退到另一种凭据类型,如 Microsoft 的 documentation。因此,我希望它改用VisualStudioCredential;事实上,如果我明确使用VisualStudioCredential,那么应用程序确实会在本地运行(当然,在发布到 Azure 时不会)。
我有点不知所措,无法解释我所看到的行为,并且不确定如何配置 DefaultAzureCredential 以便它在本地和 Azure 中都有效。有人有什么想法吗?
我正在使用 Visual Studio 2019 和 .NET 5.0。
【问题讨论】:
标签: c# azure asp.net-core