如何从天蓝色密钥库中读取值

时间:2019-11-15 08:19:33

标签: c# azure-keyvault

如果我将ClientId和客户端机密存储在Web / App Config中,我将无法理解Azure密钥库的好处。传递基本URI或完整的URL以获取值。

我没有保护应用程序,而是绕过了直接读取的内容。但是任何人只要可以从Web配置中读取值,就可以从密钥库中读取值。

只需从Web配置中复制ClientId和ClientSecret,将值粘贴到控制台应用程序中,然后通过传递URI即可获取值。

我正在虚拟机(IIS)中运行Web API(c#)。我需要实现KeyVault而不在Web配置中提供任何值。

2 个答案:

答案 0 :(得分:0)

如果您不想在web.config中存储客户端ID和客户端密钥,则可以使用Azure Managed Identity获得使用Azure Key Vault的授权。

这是官方教程:Use a Windows VM system-assigned managed identity to access Azure Key Vault

在本教程中,它说明了托管身份的工作方式以及如何获取用于调用Azure Key Vault API的令牌。

事实上,您可以在c#应用程序中直接使用“ Microsoft.Azure.Services.AppAuthentication”包。然后创建KeyVaultClient并按以下步骤获取秘密:

    var azureServiceTokenProvider = new AzureServiceTokenProvider();        
    KeyVaultClient kvc = new KeyVaultClient(azureServiceTokenProvider.KeyVaultTokenCallback);
    SecretBundle secret = kvc.GetSecretAsync(baseUrl, "testSecret").Result;
    Console.WriteLine(secret.Value);

摘要

使用Azure托管身份,可以向其添加角色分配或访问策略。然后,具有托管身份的Azure资源(VM或Web应用程序)将被视为受信任资源,并且无需任何其他配置即可从特定终结点获取令牌。

答案 1 :(得分:0)

从架构上讲,天蓝色的密钥库提供了一种简单的方法来存储应用程序的配置设置。正如您在示例文档中可能已经看到的那样,为了访问密钥库,我们将客户端ID和客户端密钥存储在web.config中,这与安全设计不同:

这是您可以做的事情:

  • 您所需的所有设置都必须是blob /任何类型的存储中的加密格式,并且只有您的应用程序才能在启动应用程序时从blob或任何类型的存储中获取配置。 一旦应用程序正确启动,最后一步应该是解密设置并以安全的方式存储在客户端。

通过这种方式,不需要公开应用程序的客户端ID和机密。

此外,我们在Azure AD中创建一个服务主体帐户,并提供从Key Vault读取数据的访问权限。稍后,我们在调用Azure AD身份验证API之后存储承载令牌,并使用此令牌访问密钥库。

  • @JackJia指出,另一种方法是**Managed identity**,托管身份将被视为受信任资源,并且可以从特定端点获取令牌,而无需任何其他配置。您可以阅读上面的答案以获取详细信息。

如果您想进一步讨论,请告诉我,很乐意为您提供帮助。