我很困惑。因此,我对 MS Azure Key Vault 概念有了一个粗略的了解,并且我想在独立的 C# Windows 应用程序中使用它。目前,仅在一台机器上进行开发,我在本地环境变量中设置了密钥和端点。 现在我想构建我的应用程序并将其交给其他人。显然,我不希望代码中包含我的密钥和秘密,因此我想使用密钥保管库。
查看示例和教程,我只看到针对本地开发人员计算机或 Azure WebApp 的说明。本地解决方案需要 Azure CL 进行身份验证,然后使用 C# 和您的 Key Vault 名称等来检索密钥和机密。到目前为止一切顺利。
但是,如何在其他人的计算机上的独立应用程序中通过我的 C# 代码访问保管库,而该人没有(或不需要)Azure CL,也没有登录凭据。
我希望我在这里说得有道理......
正在寻找解决方案,但它们都至少需要 AZCL 和身份验证,而我正在寻找能够访问密钥保管库的独立应用程序
不建议依赖环境变量进行身份验证,因为如果为用户设置,它会将身份验证信息公开给每个应用程序。即使您认为没有恶意跨越安全边界,任何上传用于诊断的进程转储的应用程序都将包含该信息。
相反,您应该使用
DefaultAzureCredential
中的 Azure.Identity
。我们设计它既适用于生产代码也适用于开发人员工作流程。默认情况下,交互式登录处于禁用状态,但您可以启用它们,如下例所示。该示例将尝试使用多种不同的技术,包括 Azure CLI,但会回退到打开浏览器以使用 Microsoft 身份验证服务对用户进行身份验证。
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
Uri vaultUri = new(args.FirstOrDefault() ?? throw new Exception("Key Vault URL required"));
DefaultAzureCredential credential = new(includeInteractiveCredentials: true);
SecretClient client = new(vaultUri, credential);
await foreach (SecretProperties props in client.GetPropertiesOfSecretsAsync())
{
if (!props.Managed && props.Enabled.GetValueOrDefault())
{
Console.WriteLine(props.Name);
}
}
这应该适用于跨不同平台的大多数人,只要他们安装了浏览器并且可以自动启动。它也比使用环境变量更安全。