Azure Key Vault 中的应用设置配置部分

问题描述

我正在使用新库 Micorosft.Identity.Web 在 Net5 API 上实施 AAD 身份验证该库公开了一种方法,该方法仅接受 IConfiguration 的部分,在 app.settings 中如下所示

Startup.cs 上来自 Micorosft.Identity.Web 的身份验证方法

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddMicrosoftIdentityWebApiAuthentication(Configuration,"AzureAd");
    ...
}

app.settings.json

"AzureAd": {
    "Domain": "contoso.com","Instance": "https://login.microsoftonline.com/","TenantId": "00000000-0000-0000-0000-000000000000","ClientId": "00000000-0000-0000-0000-000000000000"
 },

现在,问题是,我使用 Azure 来部署这个 API,当然所有这些敏感值都存储在 Key Vault 中。所以,我想找到一种方法来做到这一点:

services.AddMicrosoftIdentityWebApiAuthentication(new Configuration {
    Domain   = keyvaultClient.GetSecret("domain"),Instance = keyvaultClient.GetSecret("instance")
    TenantId = keyvaultClient.GetSecret("tenant")
    ClientId = keyvaultClient.GetSecret("client")
});

同时,我找不到在 keyvault 中创建此“部分”的方法,因此我可以这样做

services.AddMicrosoftIdentityWebApiAuthentication(keyvaultClient.GetSecret("azureadconfig"));

如果我的所有值都在 Key Vault 上,我如何存档这些选项之一,或者如何避免取决于 app.settings

编辑注释

我有 Key Vault 作为配置提供程序,但我不知道如何以 Section 方式返回这些值,因为方法是期望的

解决方法

首先,这些值都不是秘密。因此,它们不一定需要位于 Key Vault 中。

但是,如果您无论如何都希望它们存在,则需要将 Key Vault 添加为配置提供程序。 然后 Key Vault 机密将通过 IConfiguration 可用,就像 appsettings.json 中的设置一样。

我写了一篇关于该主题的文章(也使用托管标识连接到 Key Vault):https://joonasw.net/view/aspnet-core-azure-keyvault-msi

,

您可以在 Key Vault 机密名称中使用双破折号,.NET 会将它们视为部分。机密名称:Section--Itemname