Azure.Security.KeyVault.Secrets 4.6.0

前缀已保留
dotnet add package Azure.Security.KeyVault.Secrets --version 4.6.0                
NuGet\Install-Package Azure.Security.KeyVault.Secrets -Version 4.6.0                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="Azure.Security.KeyVault.Secrets" Version="4.6.0" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以引用包。
paket add Azure.Security.KeyVault.Secrets --version 4.6.0                
#r "nuget: Azure.Security.KeyVault.Secrets, 4.6.0"                
#r 指令可用于 F# Interactive 和多语言笔记本。将此复制到交互式工具或脚本的源代码中以引用包。
// Install Azure.Security.KeyVault.Secrets as a Cake Addin
#addin nuget:?package=Azure.Security.KeyVault.Secrets&version=4.6.0

// Install Azure.Security.KeyVault.Secrets as a Cake Tool
#tool nuget:?package=Azure.Security.KeyVault.Secrets&version=4.6.0                

Azure Key Vault 密钥客户端库用于 .NET

Azure Key Vault 是一种云服务,它提供对密码和数据库连接字符串等机密的安全存储。

Azure Key Vault 密钥客户端库允许您安全地存储和控制系统访问令牌、密码、API密钥和其他机密。此库提供了用于创建、检索、更新、删除、清除、备份、恢复和列出密钥及其版本的运算。

源代码 | 包(NuGet) | API 文档参考 | 产品文档 | 示例 | 迁移指南

入门

安装包

使用 NuGet 安装 Azure Key Vault 密钥客户端库用于 .NET

dotnet add package Azure.Security.KeyVault.Secrets

先决条件

  • 一个Azure订阅
  • 现有的Azure Key Vault。如果您需要创建Azure Key Vault,可以使用Azure门户或Azure CLI
  • 使用RBAC(推荐)或访问控制授权访问现有的Azure Key Vault。

如果您使用Azure CLI,请将<your-resource-group-name><your-key-vault-name>替换为您自己的、唯一的名称。

az keyvault create --resource-group <your-resource-group-name> --name <your-key-vault-name>

认证客户端

为了与Azure Key Vault服务交互,您需要创建SecretClient类的实例。您需要一个保管库URL,这可能在门户中显示为“DNS名称”,以及用于实例化客户端对象的凭据。

下面的示例使用了DefaultAzureCredential,适用于包括本地开发和生产环境在内的大多数场景。此外,我们建议在生产环境中使用托管身份进行身份验证。有关不同身份验证方式和相应凭据类型的更多信息,请参阅Azure Identity文档。

要使用下面的DefaultAzureCredential提供者或其他由Azure SDK提供的凭据提供者,您必须首先安装Azure.Identity包。

dotnet add package Azure.Identity

实例化一个DefaultAzureCredential以传递给客户端。如果它们将使用相同的身份进行身份验证,则可以多个客户端使用相同的令牌凭据实例。

// 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");

关键概念

KeyVaultSecret

KeyVaultSecret是Azure Key Vault中的基本资源。从开发者的角度来看,Azure Key Vault API接受并返回字符串格式的密钥值。

SecretClient

SecretClient提供SDK中的同步和异步操作,允许根据应用程序的使用场景选择客户端。初始化SecretClient后,您就可以与Azure Key Vault中的密钥进行交互了。

线程安全

我们保证所有客户端实例方法都是线程安全的且彼此独立(《线程安全指南》)。这确保了重用客户端实例的建议总是安全的,即使在跨线程的情况下。

其他概念

客户端选项 | 访问响应 | 长时间运行的操作 | 处理失败 | 诊断 | 模拟 | 客户端生命周期

示例

Azure.Security.KeyVault.Secrets包支持同步和异步API。

以下部分提供了使用上述创建的client的几个代码片段,覆盖了某些最常见的Azure Key Vault密钥服务相关任务。

同步示例

异步示例

创建密钥

SetSecret创建一个用于在Azure Key Vault中存储的KeyVaultSecret。如果已存在具有相同名称的秘密,则创建秘密的新版本。

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

检索密钥

GetSecret从Azure Key Vault检索先前存储的秘密。

KeyVaultSecret secret = client.GetSecret("secret-name");

Console.WriteLine(secret.Name);
Console.WriteLine(secret.Value);

更新现有密钥

UpdateSecretProperties更新Azure Key Vault中先前存储的秘密。仅更新秘密的属性。要更新值,请在具有相同名称的秘密上调用SecretClient.SetSecret

KeyVaultSecret secret = client.GetSecret("secret-name");

// Clients may specify the content type of a secret to assist in interpreting the secret data when its retrieved.
secret.Properties.ContentType = "text/plain";

// You can specify additional application-specific metadata in the form of tags.
secret.Properties.Tags["foo"] = "updated tag";

SecretProperties updatedSecretProperties = client.UpdateSecretProperties(secret.Properties);

Console.WriteLine(updatedSecretProperties.Name);
Console.WriteLine(updatedSecretProperties.Version);
Console.WriteLine(updatedSecretProperties.ContentType);

删除密钥

StartDeleteSecret启动一个长时间运行的操作以删除Azure Key Vault中先前存储的秘密。您可以在操作完成之前立即检索秘密。当Azure Key Vault未启用软删除时,此操作将永久删除秘密。

DeleteSecretOperation operation = client.StartDeleteSecret("secret-name");

DeletedSecret secret = operation.Value;
Console.WriteLine(secret.Name);
Console.WriteLine(secret.Value);

删除并清除密钥

在尝试清除或恢复秘密之前,您需要等待长时间运行的操作完成。您可以像下面这样循环调用UpdateStatus来实现

DeleteSecretOperation operation = client.StartDeleteSecret("secret-name");

// You only need to wait for completion if you want to purge or recover the secret.
// You should call `UpdateStatus` in another thread or after doing additional work like pumping messages.
while (!operation.HasCompleted)
{
    Thread.Sleep(2000);

    operation.UpdateStatus();
}

DeletedSecret secret = operation.Value;
client.PurgeDeletedSecret(secret.Name);

列出秘密

此示例列出特定Azure Key Vault中的所有秘密。列出所有秘密时,不会返回值。您需要调用SecretClient.GetSecret来检索值。

Pageable<SecretProperties> allSecrets = client.GetPropertiesOfSecrets();

foreach (SecretProperties secretProperties in allSecrets)
{
    Console.WriteLine(secretProperties.Name);
}

异步创建密钥

异步API与其同步版本相同,但异步方法以典型的"Async"后缀返回,并返回一个Task

此示例使用指定的可选参数在Azure Key Vault中创建一个秘密。

KeyVaultSecret secret = await client.SetSecretAsync("secret-name", "secret-value");

Console.WriteLine(secret.Name);
Console.WriteLine(secret.Value);

异步列密钥

列出秘密不需要等待GetPropertiesOfSecretsAsync方法,但返回一个可用于await foreach语句的AsyncPageable<SecretProperties>

AsyncPageable<SecretProperties> allSecrets = client.GetPropertiesOfSecretsAsync();

await foreach (SecretProperties secretProperties in allSecrets)
{
    Console.WriteLine(secretProperties.Name);
}

异步删除秘密

在异步删除秘密并在清除之前,您可以在操作上等待WaitForCompletionAsync方法。默认情况下,这将无限循环,但您可以通过传递一个CancellationToken来取消它。

DeleteSecretOperation operation = await client.StartDeleteSecretAsync("secret-name");

// You only need to wait for completion if you want to purge or recover the secret.
await operation.WaitForCompletionAsync();

DeletedSecret secret = operation.Value;
await client.PurgeDeletedSecretAsync(secret.Name);

故障排除

有关诊断各种失败场景的详细信息,请参阅我们的故障排除指南

一般

当您使用.NET SDK与Azure Key Vault秘密客户端库交互时,服务返回的错误对应于REST API请求返回的相同HTTP状态码。

例如,如果您尝试检索Azure Key Vault中不存在的秘密,则返回一个404错误,表示Not Found(未找到)。

try
{
    KeyVaultSecret secret = client.GetSecret("some_secret");
}
catch (RequestFailedException ex)
{
    Console.WriteLine(ex.ToString());
}

您将注意到记录了附加信息,例如操作的Client请求ID。

Message:
    Azure.RequestFailedException : Service request failed.
    Status: 404 (Not Found)
Content:
    {"error":{"code":"SecretNotFound","message":"Secret not found: some_secret"}}

Headers:
    Cache-Control: no-cache
    Pragma: no-cache
    Server: Microsoft-IIS/10.0
    x-ms-keyvault-region: westus
    x-ms-request-id: 625f870e-10ea-41e5-8380-282e5cf768f2
    x-ms-keyvault-service-version: 1.1.0.866
    x-ms-keyvault-network-info: addr=131.107.174.199;act_addr_fam=InterNetwork;
    X-AspNet-Version: 4.0.30319
    X-Powered-By: ASP.NET
    Strict-Transport-Security: max-age=31536000;includeSubDomains
    X-Content-Type-Options: nosniff
    Date: Tue, 18 Jun 2019 16:02:11 GMT
    Content-Length: 75
    Content-Type: application/json; charset=utf-8
    Expires: -1

下一步操作

在GitHub存储库中,您可以使用此Azure Key Vault秘密客户端库的几个示例。这些示例提供了处理Azure Key Vault时遇到的常见场景的示例代码。

  • Sample1_HelloWorld.md - 用于处理Azure Key Vault,包括

    • 创建密钥
    • 获取现有秘密
    • 更新现有密钥
    • 删除秘密
  • Sample2_BackupAndRestore.md - 包含处理Azure Key Vault秘密的代码片段,包括

    • 备份和恢复秘密
  • Sample3_GetSecrets.md - 用于处理Azure Key Vault秘密的示例代码,包括

    • 创建秘密
    • 列出Key Vault中的所有秘密
    • 更新Key Vault中的秘密
    • 列出指定秘密的版本
    • 从Key Vault中删除秘密
    • 列出Key Vault中的已删除秘密

其他文档

贡献

有关构建、测试和贡献这些库的详细信息,请参阅CONTRIBUTING.md.

本项目欢迎贡献和建议。大多数贡献都需要您同意贡献者许可协议(CLA),声明您拥有并可授予我们使用您贡献的权利。有关详细信息,请访问https://cla.microsoft.com.

在提交拉取请求时,CLA机器人将自动确定您是否需要提供CLA,并相应地对PR进行装饰(例如,标签、注释)。只需遵循机器人提供的说明。您将只需在整个使用我们的CLA的repo中这样做一次。

本项目已采用Microsoft开源行为准则。有关更多信息,请参阅行为准则FAQ或通过[email protected]联系以获取任何额外的问题或评论。

产品 兼容和附加计算的目标框架版本。
.NET net5.0 已计算。 net5.0-windows 已计算。 net6.0 已计算。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
.NET Core netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET Standard netstandard2.0 兼容。 netstandard2.1 已计算。
.NET Framework net461 已计算。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容的目标框架
包含的目标框架(在包中)
了解有关目标框架.NET Standard的更多信息。

NuGet 包 (220)

显示依赖 Azure.Security.KeyVault.Secrets 的前5个 NuGet 包

下载
Microsoft.Extensions.Configuration.AzureAppConfiguration

Microsoft.Extensions.Configuration.AzureAppConfiguration 是 .NET Core 框架的配置提供程序,允许开发者在应用程序中将其作为配置源使用 Microsoft Azure App Configuration 服务。

Microsoft.Identity.Web.Certificate

此包将为 MSAL.NET 带来证书管理。

Azure.Extensions.AspNetCore.Configuration.Secrets

Azure Key Vault配置提供程序实现,用于Microsoft.Extensions.Configuration。

Nuke.Common

由signpath.io签署的C#/.NET无AKE构建系统,来自'repository 'https://github.com/nuke-build/nuke'分支'011956b31c05f14f3233f6241cd6fbe038824d71'(有关构建设置,请参阅包含的AppVeyorSettings.json文件)。

AspNetCore.HealthChecks.AzureKeyVault

HealthChecks.AzureKeyVault是用于Azure Key Vault机密的健康检查包

GitHub仓库 (36)

显示依赖Azure.Security.KeyVault.Secrets的GitHub最受欢迎的前5个仓库

仓库 星标
dotnet/orleans
.NET原生应用框架
Azure/azure-sdk-for-net
此仓库用于Azure SDK for .NET的活跃开发。对于SDK的消费者,我们建议您访问我们的公共开发者文档https://learn.microsoft.com/dotnet/azure/或我们的版本化开发者文档https://azure.github.io/azure-sdk-for-net。
Xabaril/AspNetCore.Diagnostics.HealthChecks
ASP.NET Core诊断包的企业健康检查
dotnet/aspire
构建.NET原生、云就绪、可观察、生产就绪的分布式应用程序的强语言栈
microsoft/onefuzz
自托管的Fuzzing-As-A-Service平台
版本 下载 最后更新
4.6.0 10,514,610 2/15/2024
4.6.0-beta.2 76,102 11/13/2023
4.6.0-beta.1 3,746 11/10/2023
4.5.0 28,228,454 3/14/2023
4.5.0-beta.1 198,324 11/9/2022
4.4.0 12,461,433 9/20/2022
4.3.0 34,186,894 3/26/2022
4.3.0-beta.4 96,111 1/13/2022
4.3.0-beta.2 77,090 10/14/2021
4.3.0-beta.1 231,483 8/11/2021
4.2.0 49,838,764 6/16/2021
4.2.0-beta.5 47,679 5/12/2021
4.2.0-beta.4 272,935 2/11/2021
4.2.0-beta.3 170,449 11/13/2020
4.2.0-beta.2 9,253 10/7/2020
4.2.0-beta.1 32,111 9/9/2020
4.1.0 66,423,926 8/12/2020
4.1.0-preview.1 105,340 3/10/2020
4.0.3 3,102,904 4/4/2020
4.0.2 10,638,470 3/4/2020
4.0.1 32,365,379 1/9/2020
4.0.0 1,712,213 10/31/2019
4.0.0-preview.5 2,281 10/8/2019
4.0.0-preview.4 1,103 9/11/2019
4.0.0-preview.3 3,158 8/9/2019
4.0.0-preview.2 446 8/6/2019
4.0.0-preview.1 1,324 6/28/2019