如果我将ClientId和客户端机密存储在Web / App Config中,我将无法理解Azure密钥库的好处。传递基本URI或完整的URL以获取值。
我没有保护应用程序,而是绕过了直接读取的内容。但是任何人只要可以从Web配置中读取值,就可以从密钥库中读取值。
只需从Web配置中复制ClientId和ClientSecret,将值粘贴到控制台应用程序中,然后通过传递URI即可获取值。
我正在虚拟机(IIS)中运行Web API(c#)。我需要实现KeyVault而不在Web配置中提供任何值。
答案 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中,这与安全设计不同:
这是您可以做的事情:
通过这种方式,不需要公开应用程序的客户端ID和机密。
此外,我们在Azure AD中创建一个服务主体帐户,并提供从Key Vault读取数据的访问权限。稍后,我们在调用Azure AD身份验证API之后存储承载令牌,并使用此令牌访问密钥库。
**Managed identity**
,托管身份将被视为受信任资源,并且可以从特定端点获取令牌,而无需任何其他配置。您可以阅读上面的答案以获取详细信息。如果您想进一步讨论,请告诉我,很乐意为您提供帮助。