您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

快速入门:适用于 JavaScript 的 Azure Key Vault 证书客户端库(版本 4)

适用于 JavaScript 的 Azure Key Vault 证书客户端库入门。 Azure Key Vault 是一项云服务,它为证书提供了安全的存储。 可以安全地存储密钥、密码、证书和其他机密。 可以通过 Azure 门户创建和管理 Azure Key Vault。 本快速入门介绍如何使用 JavaScript 客户端库在 Azure 密钥保管库中创建、检索和删除证书

Key Vault 客户端库资源:

API 参考文档 | 库源代码 | 包 (npm)

有关 Key Vault 和证书的详细信息,请参阅:

先决条件

本快速入门假设你运行 Azure CLI

登录 Azure

  1. 运行 login 命令。

    az login
    

    如果 CLI 可以打开默认浏览器,它将这样做并加载 Azure 登录页。

    否则,请在 https://aka.ms/devicelogin 处打开浏览器页,然后输入终端中显示的授权代码。

  2. 在浏览器中使用帐户凭据登录。

创建新的 Node.js 应用程序

接下来,创建可部署到云的 Node.js 应用程序。

  1. 在命令外壳中,创建一个名为 key-vault-node-app 的文件夹:
mkdir key-vault-node-app
  1. 切换到新创建的 key-vault-node-app 目录,然后运行 init 命令以初始化节点项目:
cd key-vault-node-app
npm init -y

安装 Key Vault 包

在控制台窗口中,安装适用于 Node.js 的 Azure Key Vault 证书库

npm install @azure/keyvault-certificates

安装 azure.identity 包以对 Key Vault 进行身份验证

npm install @azure/identity

设置环境变量

此应用程序使用 Key Vault 名称作为名为 KEY_VAULT_NAME 的环境变量。

Windows

set KEY_VAULT_NAME=<your-key-vault-name>

Windows PowerShell

$Env:KEY_VAULT_NAME="<your-key-vault-name>"

macOS 或 Linux

export KEY_VAULT_NAME=<your-key-vault-name>

授予对 Key Vault 的访问权限

针对密钥保管库创建一个访问策略,以便为用户帐户授予证书权限

az keyvault set-policy --name <YourKeyVaultName> --upn user@domain.com --certificate-permissions delete get list create purge

代码示例

以下代码示例展示了如何创建客户端,以及如何设置、检索和删除证书。

设置应用框架

  1. 创建新的文本文件并将其另存为“index.js”

  2. 添加所需调用以加载 Azure 和 Node.js 模块

  3. 为程序创建结构,包括基本的异常处理

const readline = require('readline');

function askQuestion(query) {
    const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout,
    });

    return new Promise(resolve => rl.question(query, ans => {
        rl.close();
        resolve(ans);
    }))
}

async function main() {
    
}

main().then(() => console.log('Done')).catch((ex) => console.log(ex.message));

添加指令

将以下指令添加到代码的顶部:

const { DefaultAzureCredential } = require("@azure/identity");
const { CertificateClient } = require("@azure/keyvault-certificates");

进行身份验证并创建客户端

本快速入门使用登录用户向 Key Vault 进行身份验证,这是本地开发的首选方法。 对于部署到 Azure 的应用程序,应将托管标识分配给应用服务或虚拟机。有关详细信息,请参阅托管标识概述

在下面的示例中,Key Vault 的名称将扩展为 Key Vault URI,格式为“https://<your-key-vault-name>.vault.azure.net”。 此示例使用 Azure 标识库“DefaultAzureCredential()”类,该类允许在具有不同选项的不同环境中使用相同代码提供标识。 有关向 Key Vault 进行身份验证的详细信息,请参阅开发人员指南

将以下代码添加到“main()”函数

const keyVaultName = process.env["KEY_VAULT_NAME"];
const KVUri = "https://" + keyVaultName + ".vault.azure.net";

const credential = new DefaultAzureCredential();
const client = new Certificate(KVUri, credential);

保存证书

现在,应用程序已进行身份验证,可以使用 beginCreateCertificate method 方法将证书放入 keyvault 中,这需要证书的名称和具有证书策略属性的证书策略证书策略

const certificatePolicy = {
  issuerName: "Self",
  subject: "cn=MyCert"
};
const createPoller = await client.beginCreateCertificate(certificateName, certificatePolicy);
const certificate = await poller.pollUntilDone();

备注

如果证书名已存在,则上面的代码将创建该证书的新版本。

检索证书

现在,可以使用 getCertificate 方法检索以前设置的值。

const retrievedCertificate = await client.getCertificate(certificateName);

删除证书

最后,让我们使用 beginDeleteCertificatepurgeDeletedCertificate 方法从密钥保管库中删除并清除证书。

const deletePoller = await client.beginDeleteCertificate(certificateName);
await deletePoller.pollUntilDone();
await client.purgeDeletedCertificate(certificateName);

示例代码

const { DefaultAzureCredential } = require("@azure/identity");
const { CertificateClient } = require("@azure/keyvault-certificates");

const readline = require('readline');

function askQuestion(query) {
    const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout,
    });

    return new Promise(resolve => rl.question(query, ans => {
        rl.close();
        resolve(ans);
    }))
}

async function main() {

  const string certificateName = "myCertificate";
  const keyVaultName = process.env["KEY_VAULT_NAME"];
  const KVUri = "https://" + keyVaultName + ".vault.azure.net";

  const credential = new DefaultAzureCredential();
  const client = new CertificateClient(KVUri, credential);

  console.log("Creating a certificate in " + keyVaultName + " called '" + certificateName +  "` ...");
  const certificatePolicy = {
  issuerName: "Self",
  subject: "cn=MyCert"
  };
  const createPoller = await client.beginCreateCertificate(certificateName, certificatePolicy);
  const certificate = await poller.pollUntilDone();

  console.log("Done.");

  console.log("Retrieving your certificate from " + keyVaultName + ".");

  const retrievedCertificate = await client.getCertificate(certificateName);

  console.log("Your certificate version is '" + retrievedCertificate.properties.version + "'.");

  console.log("Deleting your certificate from " + keyVaultName + " ...");
  const deletePoller = await client.beginDeleteCertificate(certificateName);
  await deletePoller.pollUntilDone();
  console.log("Done.");
  
  console.log("Purging your certificate from {keyVaultName} ...");
  await client.purgeDeletedCertificate(certificateName);
  
}

main().then(() => console.log('Done')).catch((ex) => console.log(ex.message));

测试和验证

执行以下命令来运行应用。

npm install
npm index.js

随即显示以下输出的变体:

Creating a certificate in mykeyvault called 'myCertificate' ... done.
Retrieving your certificate from mykeyvault.
Your certificate version is '8532359bced24e4bb2525f2d2050738a'.
Deleting your certificate from mykeyvault ... done
Purging your certificate from mykeyvault ... done 

后续步骤

在本快速入门中,你创建了一个密钥保管库,存储了一个证书,然后检索了该证书。 若要详细了解 Key Vault 以及如何将其与应用程序集成,请继续阅读以下文章。