The*_*mos 4 c# environment-variables azure-keyvault azure-authentication
我一直在关注本教程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);
Run Code Online (Sandbox Code Playgroud)
但仅在将AZURE_CLIENT_ID、AZURE_CLIENT_SECRET和AZURE_TENANT_ID保存为环境变量之后。
我想知道的是,这三个密钥是否可以在环境变量中加密,并且仍然可以通过DefaultAzureCredential()方法解密?
或者,这些密钥是否可以存储在其他地方,在本地解密,然后传递到DefaultAzureCredential()方法中?
我尝试使用DefaultAzureCredentialOptions()重载,但没有选项可以传递客户端密钥...
我还尝试使用 Fluent.Authentication NuGet 在代码中构建令牌凭据对象并将其传递到SecretClient构造函数中,但收到错误消息
cannot convert from 'Microsoft.Azure.Management.ResourceManager.Fluent.Authentication.AzureCredentials' to 'Azure.Core.TokenCredential'
Run Code Online (Sandbox Code Playgroud)
我想做的事情可能吗?或者 Microsoft 是否认为环境变量是一个足够安全的位置来存储未加密的客户端 ID + 机密?
我通过浏览 Jim 的文档链接找到了答案:我必须使用ClientSecretCredential() ,而不是 DefaultAzureCredential ( )方法(使用环境变量),它的重载允许指定tenantId、clientId 和 clientSecret:
var client = new SecretClient(new Uri(kvUri), new ClientSecretCredential(tenantId, clientId, clientSecret));
Run Code Online (Sandbox Code Playgroud)
因此,现在为了提高安全性,我可以简单地将这些(加密的)凭据存储在每台开发计算机的用户设置上。