【发布时间】:2022-07-08 05:27:08
【问题描述】:
如何从Azure.Security.KeyVault.Secrets 创建和处置 SecretClient?我正在从 KeyVaultClient 迁移,似乎找不到太多关于此的文档。
【问题讨论】:
标签: c# .net-core azure-keyvault
如何从Azure.Security.KeyVault.Secrets 创建和处置 SecretClient?我正在从 KeyVaultClient 迁移,似乎找不到太多关于此的文档。
【问题讨论】:
标签: c# .net-core azure-keyvault
根据应用程序的用例,SecretClient 提供同步和异步 活动。初始化 SecretClient 后,您可以与 Azure Key Vault 中的机密进行交互。
创建秘密:
KeyVaultSecret secret = client.SetSecret("secret-name", "secret-value");
Console.WriteLine(secret.Name);
Console.WriteLine(secret.Value);
Console.WriteLine(secret.Properties.Version);
Console.WriteLine(secret.Properties.Enabled);
StartDeleteSecret 删除存储在 Azure Key Vault 中的机密。如果未为 Azure Key Vault 启用 soft-delete,则会永久释放机密。
DeleteSecretOperation operation = client.StartDeleteSecret("secret-name");
DeletedSecret secret = operation.Value;
Console.WriteLine(secret.Name);
Console.WriteLine(secret.Value);
有关详细信息,请参考以下链接:
【讨论】:
有一篇非常好的文章解释了 Azure SDK 的客户端如何工作 - Lifetime management for Azure SDK .NET clients:
- 客户端生命周期:Azure SDK 客户端生命周期管理的主要规则是:将客户端视为单例。
- 线程安全:客户端是线程安全的。模型不是线程安全的。
- 客户端是不可变的
- 客户端不是一次性的:默认共享 HttpClient:经常出现的一个问题是,为什么基于 HTTP 的 Azure 客户端不实现
IDisposable,而在内部使用一次性的HttpClient?默认情况下,所有 Azure SDK 客户端都使用一个共享的HttpClient实例,并且不会创建任何其他需要主动释放的资源。共享客户端实例在整个应用程序生命周期中都存在。
来自Azure Key Vault secret client library for .NET,有很多关于如何使用新客户端的示例:
// Create a new secret client using the default credential from Azure.Identity using environment variables previously set,
// including AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, and AZURE_TENANT_ID.
var client = new SecretClient(vaultUri: new Uri(vaultUrl), credential: new DefaultAzureCredential());
// Create a new secret using the secret client.
KeyVaultSecret secret = client.SetSecret("secret-name", "secret-value");
// Retrieve a secret using the secret client.
secret = client.GetSecret("secret-name");
【讨论】: