簡體   English   中英

使用應用程序客戶端密碼訪問 azure 密鑰保管庫密碼

[英]Access azure key vault secret with application client secret

問題陳述:在 Web/控制台 c# 應用程序中以編程方式檢索和使用存儲在 azure 密鑰保管庫中的敏感值(比如數據庫連接字符串)。

我了解您可以在 AAD 中注冊應用程序並使用其客戶端 ID 和客戶端密碼以編程方式生成廣告令牌,該令牌可用於調用/訪問 azure 密鑰保管庫密碼。

我的困惑是客戶端機密本身是一個敏感的“密碼”,您希望將其存儲在密鑰庫中。 一旦有人知道客戶端機密,他們就可以訪問密鑰保管庫中的所有機密。 那么創建一個新的秘密(客戶端秘密)來存儲和訪問原始秘密有什么意義呢? (有人可以解釋這背后的邏輯嗎?謝謝!

這就是自舉的問題。 你如何在不使用秘密的情況下訪問秘密商店?

如果您在 Azure 中運行您的應用程序,答案很簡單。 使用托管身份

如果未在 Azure 中運行,則交互式應用可以代表當前用戶訪問 Key Vault。 這確實要求用戶有權訪問 Key Vault 機密。

另一種方法是使用證書而不是客戶端密碼。

如果您在 Azure 上托管您的應用程序,則可以使用托管身份在服務之間執行身份驗證。 一旦 Azure 配置完成,您需要在您的應用中添加以下內容:它只需要存儲 Azure KeyVault URI - 作為 env 變量會更好。

以下代碼將 Azure KeyVault 與 AppConfiguration 一起使用,因此本地appsettings.json文件為空:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.ConfigureAppConfiguration((hostingContext, configBuilder) =>
            {
                if (hostingContext.HostingEnvironment.IsDevelopment()) return;

                AddAzureKeyVault(configBuilder);

                var configRoot = configBuilder.Build();
                AddAzureAppConfiguration(configBuilder, configRoot);
            });

        webBuilder.UseStartup<Startup>();
    });

private static void AddAzureKeyVault(IConfigurationBuilder configBuilder)
{
    var azureServiceTokenProvider = new AzureServiceTokenProvider();
    var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
    var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");

    configBuilder.AddAzureKeyVault(
        $"https://{keyVaultName}.vault.azure.net/",
        keyVaultClient,
        new DefaultKeyVaultSecretManager());
}

private static void AddAzureAppConfiguration(IConfigurationBuilder configBuilder, IConfigurationRoot configRoot)
{
    var appConfigName = configRoot["AppConfiguration-Name"];
    configBuilder.AddAzureAppConfiguration(appConfigName);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM