如何在独立 .NET (C#) 应用程序中使用 MS Azure Key Vaults

问题描述 投票:0回答:1

我很困惑。因此,我对 MS Azure Key Vault 概念有了一个粗略的了解,并且我想在独立的 C# Windows 应用程序中使用它。目前,仅在一台机器上进行开发,我在本地环境变量中设置了密钥和端点。 现在我想构建我的应用程序并将其交给其他人。显然,我不希望代码中包含我的密钥和秘密,因此我想使用密钥保管库。

查看示例和教程,我只看到针对本地开发人员计算机或 Azure WebApp 的说明。本地解决方案需要 Azure CL 进行身份验证,然后使用 C# 和您的 Key Vault 名称等来检索密钥和机密。到目前为止一切顺利。

但是,如何在其他人的计算机上的独立应用程序中通过我的 C# 代码访问保管库,而该人没有(或不需要)Azure CL,也没有登录凭据。

我希望我在这里说得有道理......

正在寻找解决方案,但它们都至少需要 AZCL 和身份验证,而我正在寻找能够访问密钥保管库的独立应用程序

c# azure azure-keyvault
1个回答
0
投票

不建议依赖环境变量进行身份验证,因为如果为用户设置,它会将身份验证信息公开给每个应用程序。即使您认为没有恶意跨越安全边界,任何上传用于诊断的进程转储的应用程序都将包含该信息。

相反,您应该使用

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);
    }
}

这应该适用于跨不同平台的大多数人,只要他们安装了浏览器并且可以自动启动。它也比使用环境变量更安全。

© www.soinside.com 2019 - 2024. All rights reserved.