如何解决具有Azure Key Vault的本地ASP.NET Framework Web应用程序
我们正在尝试保护内部ASP.NET Framework Web应用程序中的应用程序秘密。提供给我的最初计划是使用Azure Key Vault。我开始使用Visual Studio Enterprise订阅进行开发工作,并且在本地似乎可以正常工作。
我们已经在公司的生产环境中创建了第二个Key Vault,并且我可以在本地使用它,因为我自己的AAD帐户可以访问该保管库。但是,在这个项目(4.7.2 Web Forms Web应用程序)中,我看不到任何指定我们为该应用程序创建的访问策略主体的方法。
我的google-fu让我失望:是否有任何文档说明如何执行此操作?这种情况-甚至可能在Azure环境之外的本地ASP.NET Framework应用程序访问Key Vault以获取配置值吗?
谢谢。
更新:我无法找到允许我从“添加连接的服务”对话框中使用访问策略主体的解决方案。我感到有些惊讶,因为它不在里面,或者隐藏得足以让我无法捉摸。因此,我最终编写了自己的Key Vault Secret-Reader函数,类似于标记的答案。希望这可以帮助某人...
解决方法
在这种情况下,您的选择是使用服务主体来访问密钥库,请按照以下步骤操作,我的示例从密钥库获取了秘密。
1。Register an application with Azure AD and create a service principal。
2。Get values for signing in和create a new application secret。
3。导航到门户中的密钥库-> Access policies
->为服务主体添加正确的秘密许可。
4。然后使用下面的代码,将<client-id>
,<tenant-id>
,<client-secret>
替换为之前获得的值。
using System;
using Microsoft.Azure.KeyVault;
using Microsoft.Azure.Services.AppAuthentication;
namespace test1
{
class Program
{
static void Main(string[] args)
{
var azureServiceTokenProvider = new AzureServiceTokenProvider("RunAs=App;AppId=<client-id>;TenantId=<tenant-id>;AppKey=<client-secret>");
var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
var secret = kv.GetSecretAsync("https://keyvaultname.vault.azure.net/","mySecret123").GetAwaiter().GetResult();
Console.WriteLine(secret);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。