初始化新的 SecretClient 时使用加密的 Azure 凭据

Use encrypted Azure credentials when initializing new SecretClient

我一直在学习本教程 Azure Key Vault client library for .NET (v4) 试图了解桌面应用程序中的 Key Vault。我按照指示设置了一个服务委托人并授予它访问我的保险库的权限,然后我成功地使用

检索了一个秘密
var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());
string secretName = "test";
KeyVaultSecret secret = client.GetSecret(secretName);

但仅在保存我的 AZURE_CLIENT_IDAZURE_CLIENT_SECRETAZURE_TENANT_ID 作为环境变量。

我想知道的是,这三个密钥是否可以在环境变量中加密并且仍然可以通过 DefaultAzureCredential() 方法解密?

或者,这些密钥是否可以存储在其他地方,在本地解密,然后传递给 DefaultAzureCredential() 方法?

我尝试使用 DefaultAzureCredentialOptions() 重载,但没有传递客户端密码的选项...

我还尝试使用 Fluent.Authentication NuGet 在代码中构建令牌凭据对象并将其传递给 SecretClient 构造函数,但我收到错误消息

cannot convert from 'Microsoft.Azure.Management.ResourceManager.Fluent.Authentication.AzureCredentials' to 'Azure.Core.TokenCredential'

我想做的事情有可能吗?或者微软是否假设环境变量是一个足够安全的位置来存储未加密的客户端 ID + 秘密?

我通过 Jim 的文档链接找到了答案: 而不是 DefaultAzureCredential() 方法(使用环境变量)我不得不使用 ClientSecretCredential(),其重载允许指定 tenantId, clientId 和 clientSecret:

var client = new SecretClient(new Uri(kvUri), new ClientSecretCredential(tenantId, clientId, clientSecret));

所以现在为了额外的安全性,我可以简单地将这些(加密的)凭据存储在每台开发机器的用户设置中。