错误(Azure Key Vault)配置为仅供 Azure Active Directory 用户使用

Error (Azure Key Vault) is configured for use by Azure Active Directory users only

完整错误: Microsoft.Extensions.Configuration.AzureAppConfiguration.KeyVaultReferenceException:SharedTokenCacheCredential 身份验证失败:AADSTS9002332:应用程序 'cfa8b339-82a2-471a-a3c9-0fc0be7a4093'(Azure Key Vault) 配置为仅供 Azure Active Directory 用户使用。请不要使用 /consumers 端点来处理此请求。 跟踪 ID:a4b9a7c9-8eb4-48ff-8871-8a63d69b1400 (Azure Key Vault) 配置为仅供 Azure Active Directory 用户使用。请不要使用 /consumers 端点来处理此请求。


我正在浏览此 Microsoft 文档页面上的示例: https://docs.microsoft.com/en-us/azure/azure-app-configuration/use-key-vault-references-dotnet-core?tabs=powershell%2Ccore3x

构建时没有错误,但是当我在本地主机上启动网站时,出现上述错误。

这是 Program.cs 文件中的代码:

  public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)

                .UseSerilog()
                .ConfigureWebHostDefaults(webBuilder =>
            webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
            {
                var settings = config.Build();

                config.AddAzureAppConfiguration(options =>
                {
                    options.Connect(settings["ConnectionStrings:AppConfig"])
                            .ConfigureKeyVault(kv =>
                            {
                                kv.SetCredential(new DefaultAzureCredential());
                            });
                });
            })
            .UseStartup<Startup>());
        // See: https://github.com/MicrosoftDocs/azure-docs/issues/71592

谁能告诉我接下来要尝试什么?

参见:https://github.com/MicrosoftDocs/azure-docs/issues/71592

如果要访问Azure Key Vault,请参考以下步骤

  1. 创建服务主体
az ad sp create-for-rbac -n "http://mySP" --sdk-auth

  1. 在 azure keyvault 中设置访问策略
az keyvault set-policy -n <your-unique-keyvault-name> --spn <clientId-of-your-service-principal> --secret-permissions delete get list set --key-permissions create decrypt delete encrypt get list unwrapKey wrapKey --secret-permissions backup delete get list purge recover restore set
  1. 代码
public static IHostBuilder CreateHostBuilder(string[] args) =>
             Host.CreateDefaultBuilder(args)
             .ConfigureWebHostDefaults(webBuilder =>
             webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
             {
                 var settings = config.Build();

                 config.AddAzureAppConfiguration(options =>
                 {
                     options.Connect(settings["ConnectionStrings:AppConfig"])
                             .ConfigureKeyVault(kv =>
                             {
                                 var cert = new ClientSecretCredential("<tenant id>", "client id", "client secret");
                                 kv.SetCredential(cert);
                             });
                 });
             })
             .UseStartup<Startup>());

此外,如果您运行使用VS 2019的应用程序,您可以使用扩展Azure Service Authentication。但是需要使用租户中的一个工作账号登录,并为key vault中的账号配置权限访问策略。详情请参考here