从 .Net 应用程序访问 Azure Key Vault - 获取 DefaultAzureCredential 身份验证失败
Accessing the Azure Key Vault from a .Net Application - getting DefaultAzureCredential authentication failed
我正在尝试将我的 .Net Core 3.1 应用程序连接到 Azure Key Vault。我已按照 quickstart 教程进行操作,但出现以下错误:
Microsoft.Extensions.Configuration.AzureAppConfiguration.KeyVaultReferenceException:
'DefaultAzureCredential authentication failed.. ErrorCode:,
Key:Authentication:Twitter:ConsumerAPIKey
内部异常是:
MsalServiceException: AADSTS70002: The client does not exist or is not enabled for consumers
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 和我的用户名;当我启动网站时弹出窗口要求我登录。
DefaultAzureCredential
通过许多凭据,例如 Managed Identity,它被推荐用于 Azure 服务,因为它更安全(无共享访问令牌)。
但是,您可以使用为您的应用程序设置的环境变量,甚至可以在本地开发期间使用,即:
- AZURE_TENANT_ID : 租户 ID
- AZURE_CLIENT_ID :服务主体 ID,必须已授予必要的权限,例如
list
和 get
以了解您在示例中如何使用它们
- AZURE_CLIENT_SECRET : service principal secret(密码),只有在创建后才会显示给你
如果您使用 Azure.Identity 的新 preview 版本,它还支持 Azure CLI、Visual Studio 和其他开发环境凭据。例如,如果您使用 Azure CLI,一旦您 az login
,DefaultAzureCredential
将正常工作。
我正在尝试将我的 .Net Core 3.1 应用程序连接到 Azure Key Vault。我已按照 quickstart 教程进行操作,但出现以下错误:
Microsoft.Extensions.Configuration.AzureAppConfiguration.KeyVaultReferenceException: 'DefaultAzureCredential authentication failed.. ErrorCode:, Key:Authentication:Twitter:ConsumerAPIKey
内部异常是:
MsalServiceException: AADSTS70002: The client does not exist or is not enabled for consumers
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 和我的用户名;当我启动网站时弹出窗口要求我登录。
DefaultAzureCredential
通过许多凭据,例如 Managed Identity,它被推荐用于 Azure 服务,因为它更安全(无共享访问令牌)。
但是,您可以使用为您的应用程序设置的环境变量,甚至可以在本地开发期间使用,即:
- AZURE_TENANT_ID : 租户 ID
- AZURE_CLIENT_ID :服务主体 ID,必须已授予必要的权限,例如
list
和get
以了解您在示例中如何使用它们 - AZURE_CLIENT_SECRET : service principal secret(密码),只有在创建后才会显示给你
如果您使用 Azure.Identity 的新 preview 版本,它还支持 Azure CLI、Visual Studio 和其他开发环境凭据。例如,如果您使用 Azure CLI,一旦您 az login
,DefaultAzureCredential
将正常工作。