控制台应用程序Webjob的Azure Key保管库

时间:2019-12-11 23:27:53

标签: azure-keyvault

我使用MSI使Azure Key Vault与我的Web应用程序一起工作。现在,我正在为Web作业设置KV,这些作业只是运行.Net Framework 4.7.2的控制台应用程序。当我尝试将“使用Azure Key Vault保护”作为连接服务时,它没有显示在列表中。我正在运行最新版本的Visual Studio 2019专业版。我已经更新,甚至重新安装了VS,但是它仍然没有显示。只是不允许控制台应用程序具有密钥保管库吗?

使用MSI,Web作业如何与Key Vault一起使用?

1 个答案:

答案 0 :(得分:1)

当然,您可以使用Azure Web应用程序MSI来访问Azure控制台应用程序Webjobs中的关键文件库。我实现了一个简单的控制台应用程序webjobs演示,该演示为您读取了密钥库中的秘密,请尝试以下代码:

using Microsoft.Azure.KeyVault;
using Microsoft.Azure.KeyVault.Models;
using Microsoft.Azure.Services.AppAuthentication;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace kvtest
{
    class Program
    {
        static void Main(string[] args)
        {
            var keyVaultName = "<your key vault name>";
            var secretName = "<your secret name>";
            Console.WriteLine("Get " + secretName + " from key vault :" + GetSecret(secretName, keyVaultName).GetAwaiter().GetResult());
        }

        public static async Task<string> GetSecret(string secretName,string keyVaultName)
        {
            try
            {
                return (await GetClient().GetSecretAsync("https://"+ keyVaultName + ".vault.azure.net/", secretName)).Value;
            }

            catch (Exception ex)
            {
                return ex.Message;
            }
        }

        public static async Task<string> GetAccessTokenAsync()
        {
            AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
            return await azureServiceTokenProvider.GetAccessTokenAsync("https://vault.azure.net");
        }

        private static KeyVaultClient GetClient()
        {
            AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
            KeyVaultClient keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
            return keyVaultClient;
        }
    }
}

发布到Azure webapp并手动运行它,检查其日志,我们可以看到它已成功从Key Vault获得了秘密值:

enter image description here

顺便说一句,在运行此演示之前,请确保已为Azure webapp启用MSI,并且已在Azure密钥保管库中为其配置了访问策略。

如果您还有其他疑问,请随时告诉我。