你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

JavaScript 中的 Azure Key Vault 密钥入门

本文介绍如何使用适用于 JavaScript 的 Azure Key Vault 密钥客户端库连接到 Azure Key Vault。 连接后,可以针对保管库中的密钥运行你的代码。

API 参考 | 包 (npm) | 库源代码 | 示例 | 提供反馈

先决条件

设置项目

  1. 请打开命令提示符并更改为你的项目文件夹。 将 YOUR-DIRECTORY 更改为你的文件夹名称:

    cd YOUR-DIRECTORY
    
  2. 如果目录中没有 package.json 文件,请初始化项目以创建该文件:

    npm init -y
    
  3. 安装适用于 JavaScript 的 Azure Key Vault 密钥客户端库:

    npm install @azure/keyvault-keys
    
  4. 如果要通过 Microsoft Entra ID 使用无密码连接,请安装适用于 JavaScript 的 Azure 标识客户端库:

    npm install @azure/identity
    

授予访问权限并连接到 Key Vault

Microsoft Entra ID 通过管理连接标识(托管标识)提供最安全的连接。 这种无密码功能使你可以开发不需要存储在代码中的任何密钥的应用程序。

在以编程方式向 Azure 进行身份验证以使用 Azure Key Vault 密钥之前,请确保已设置环境。

Azure SDK for JavaScript 凭据流的示意图。

在代码中使用 DefaultAzureCredential 之前,开发人员应安装 Azure CLI 并使用 az login 命令以交互方式登录 Azure。

az login

生成应用程序

当你生成应用程序时,你的代码将与两种类型的资源交互:

  • KeyVaultKey,其中包括:
    • ID、名称和值。
    • 允许的操作。
    • ECEC-HSMRSARSA-HSMoctoct-HSM 等类型。
    • 作为 KeyProperties 的属性
  • KeyProperties,其中包括密钥的元数据,例如其名称、版本、标记、过期数据以及其是否启用。

如果需要 KeyVaultKey 的值,请使用返回 KeyVaultKey 的方法:

对象模型

适用于 JavaScript 的 Azure Key Vault 密钥客户端库包括以下客户端:

  • KeyClient:KeyClient 对象是 SDK 中的顶级对象。 此客户端可用于执行密钥管理任务,例如创建、轮换、删除和列出密钥。
  • CryptographyClient 允许对密钥进行加密、解密、签名、验证、包装和解包。

显示客户端库中 KeyClient 和 CryptographicClient 之间关系的概念图。

创建 KeyClient 对象

设置本地环境和 Key Vault 授权后,创建一个 JavaScript 文件,其中包含 @azure/identity@azure/keyvault-keys 包。 创建凭据(例如 DefaultAzureCredential),以实现与保管库的无密码连接。 使用该凭据通过 KeyClient 对象进行身份验证。

// Include required dependencies
import { DefaultAzureCredential } from '@azure/identity';  
import { KeyClient } from '@azure/keyvault-keys';  

// Authenticate to Azure
// Create KeyClient
const credential = new DefaultAzureCredential(); 
const client = new KeyClient(
    `https://${process.env.AZURE_KEYVAULT_NAME}.vault.azure.net`,
    credential
  );

// Get key
const key = await client.getKey("MyKeyName");

创建 CryptographyClient 对象

CryptographyClient 对象是 SDK 中的操作对象,使用密钥执行加密、解密、签名和验证、包装和解包等操作。

使用 KeyClient 中的标识凭据以及密钥名称创建 CryptographyClient 以执行操作。

// Include required dependencies
import { DefaultAzureCredential } from '@azure/identity';  
import {
  CryptographyClient,
  KeyClient,
  KnownEncryptionAlgorithms,
  RsaEncryptParameters
} from '@azure/keyvault-keys'; 

// Authenticate to Azure
// Create KeyClient
const credential = new DefaultAzureCredential(); 
const client = new KeyClient(
    `https://${process.env.AZURE_KEYVAULT_NAME}.vault.azure.net`,
    credential
  ); 

// Get key
const key = await client.getKey("MyKeyName");

if (key?.name) {

    // get encryption client
    const encryptClient = new CryptographyClient(key, credential);

    // encrypt data
    const encryptParams = { 
        algorithm: KnownEncryptionAlgorithms.RSAOaep256,
        plaintext: Buffer.from("Hello world!")
    }
    const encryptResult = await encryptClient.encrypt(encryptParams);
}

另请参阅

后续步骤