从.Net应用程序访问Azure Key Vault-获取DefaultAzureCredential身份验证失败

时间:2020-05-25 08:00:06

标签: azure asp.net-core azure-keyvault

我正在尝试将.Net Core 3.1应用程序连接到Azure Key Vault。我已经按照quickstart教程进行操作,并且遇到以下错误:

Microsoft.Extensions.Configuration.AzureAppConfiguration.KeyVaultReferenceException: 'DefaultAzureCredential身份验证失败。错误代码: 密钥:身份验证:Twitter:ConsumerAPIKey

内部异常是:

MsalServiceException:AADSTS70002:客户端不存在或未为消费者启用客户端

CreateHostBuilder方法如下:

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 =>
                                {
                                    kv.SetCredential(new DefaultAzureCredential());
                                });
                        });
                    })
                    .UseStartup<Startup>();
            });

我很少在网上找到此参考,except one post与使用多个凭证有关(我不是)。

任何人都可以给我一个前进的方向:关于可能导致它的线索吗?

编辑

以下似乎有效:

var defaultAzureCredentialsOptions = new DefaultAzureCredentialOptions()
{                                
    SharedTokenCacheTenantId = <tenant id>,
    SharedTokenCacheUsername = <my azure username>,
    ExcludeInteractiveBrowserCredential = false,
    ExcludeEnvironmentCredential = false,
    InteractiveBrowserTenantId = <tenant id>
};

config.AddAzureAppConfiguration(options =>
{                                
    options.Connect(settings["ConnectionStrings:AppConfig"])
        .ConfigureKeyVault(kv =>
        {
            kv.SetCredential(new DefaultAzureCredential(defaultAzureCredentialsOptions));
        });
});

尽管这确实可行(就目前而言),但我现在有了租户ID和我的用户名硬编码;当我启动该网站并要求我登录时,还会弹出一个窗口。

1 个答案:

答案 0 :(得分:0)

DefaultAzureCredential会通过许多凭据,例如为Azure服务推荐的托管身份,因为它更安全(无共享访问令牌)。

但是,您可以使用为应用程序甚至在本地开发期间设置的环境变量,即:

  • AZURE_TENANT_ID:租户ID
  • AZURE_CLIENT_ID:服务主体ID,必须已授予其必要的权限,例如listget,以确保您在示例中使用它们的方式
  • AZURE_CLIENT_SECRET:服务主体密码(密码),仅在创建后才显示给您

如果使用新的预览版本的Azure.Identity,它还支持Azure CLI,Visual Studio和其他开发环境的凭据。例如,如果您使用Azure CLI,一旦az loginDefaultAzureCredential就可以使用。