JavaScript 中的 Azure Key Vault 密钥入门
本文介绍如何使用适用于 JavaScript 的 Azure Key Vault 密钥客户端库连接到 Azure Key Vault。 连接后,可以针对保管库中的密钥运行你的代码。
API 参考 | 包 (npm) | 库源代码 | 示例 | 提供反馈
先决条件
- Azure 订阅 - 创建试用版订阅。
- Azure Key Vault 实例。 查看 Key Vault 中的访问策略,以包括在代码中执行的特定任务所需的权限。
- Node.js 版本 LTS
设置项目
请打开命令提示符并更改为你的项目文件夹。 将
YOUR-DIRECTORY
更改为你的文件夹名称:cd YOUR-DIRECTORY
如果目录中没有
package.json
文件,请初始化项目以创建该文件:npm init -y
安装适用于 JavaScript 的 Azure Key Vault 密钥客户端库:
npm install @azure/keyvault-keys
如果要通过 Microsoft Entra ID 使用无密码连接,请安装适用于 JavaScript 的 Azure 标识客户端库:
npm install @azure/identity
授予访问权限并连接到 Key Vault
Microsoft Entra ID 通过管理连接标识(托管标识)提供最安全的连接。 这种无密码功能使你可以开发不需要存储在代码中的任何密钥的应用程序。
在以编程方式向 Azure 进行身份验证以使用 Azure Key Vault 密钥之前,请确保已设置环境。
生成应用程序
当你生成应用程序时,你的代码将与两种类型的资源交互:
- KeyVaultKey,其中包括:
ID、名称和值。
允许的操作。
数据类型,如
EC
、RSA
、oct
。KeyProperties 的属性
- KeyProperties,其中包括密钥的元数据,例如其名称、版本、标记、过期数据以及其是否启用。
如果需要 KeyVaultKey 的值,请使用返回 KeyVaultKey 的方法:
对象模型
适用于 JavaScript 的 Azure Key Vault 密钥客户端库包括以下客户端:
- KeyClient:KeyClient 对象是 SDK 中的顶级对象。 此客户端可用于执行密钥管理任务,例如创建、轮换、删除和列出密钥。
- CryptographyClient 允许对密钥进行加密、解密、签名、验证、包装和解包。
创建 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.cn`,
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.cn`,
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);
}