Snabbstart: Azure Key Vault-certifikatklientbibliotek för JavaScript

Kom igång med Azure Key Vault-certifikatklientbiblioteket för JavaScript. Azure Key Vault är en molntjänst som tillhandahåller ett säkert arkiv för certifikat. Du kan på ett säkert sätt lagra nycklar, lösenord, certifikat och andra hemligheter. Du kan skapa och hantera Azure-nyckelvalv via Azure Portal. I den här snabbstarten får du lära dig hur du skapar, hämtar och tar bort certifikat från ett Azure-nyckelvalv med hjälp av JavaScript-klientbiblioteket

Key Vault-klientbiblioteksresurser:

API-referensdokumentationEns källkodspaket | för bibliotek (npm) |

Mer information om Key Vault och certifikat finns i:

Förutsättningar

Den här snabbstarten förutsätter att du kör Azure CLI.

Logga in på Azure

  1. Kör kommandot login.

    az login
    

    Om CLI kan öppna din standardwebbläsare kommer den att göra det och läsa in en Azure-inloggningssida.

    Annars öppnar du en webbläsarsida på https://aka.ms/devicelogin och anger auktoriseringskoden som visas i terminalen.

  2. Logga in med dina autentiseringsuppgifter för kontot i webbläsaren.

Skapa ett nytt Node.js program

Skapa ett Node.js program som använder ditt nyckelvalv.

  1. I en terminal skapar du en mapp med namnet key-vault-node-app och ändrar till den mappen:

    mkdir key-vault-node-app && cd key-vault-node-app
    
  2. Initiera Node.js projektet:

    npm init -y
    

Installera Key Vault-paket

  1. Använd terminalen och installera Azure Key Vault-hemlighetsbiblioteket @azure /keyvault-certificates för Node.js.

    npm install @azure/keyvault-certificates
    
  2. Installera Azure Identity-klientbiblioteket @azure /identitet för att autentisera till ett Nyckelvalv.

    npm install @azure/identity
    

Bevilja åtkomst till ditt nyckelvalv

Om du vill ge ditt program behörigheter till ditt nyckelvalv via rollbaserad åtkomstkontroll (RBAC) tilldelar du en roll med hjälp av Azure CLI-kommandot az role assignment create.

az role assignment create --role "Key Vault Secrets User" --assignee "<app-id>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"

Ersätt <app-id>, <subscription-id>, <resource-group-name> och <your-unique-keyvault-name> med dina faktiska värden. <app-id> är program-ID :t (klient) för ditt registrerade program i Azure AD.

Ange miljövariabler

Det här programmet använder key vault-namnet som en miljövariabel med namnet KEY_VAULT_NAME.

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

Autentisera och skapa en klient

Programbegäranden till de flesta Azure-tjänster måste auktoriseras. Att använda metoden DefaultAzureCredential som tillhandahålls av Azure Identity-klientbiblioteket är den rekommenderade metoden för att implementera lösenordslösa anslutningar till Azure-tjänster i koden. DefaultAzureCredential stöder flera autentiseringsmetoder och avgör vilken metod som ska användas vid körning. Med den här metoden kan din app använda olika autentiseringsmetoder i olika miljöer (lokalt jämfört med produktion) utan att implementera miljöspecifik kod.

I den här snabbstarten DefaultAzureCredential autentiserar du till nyckelvalvet med autentiseringsuppgifterna för den lokala utvecklingsanvändare som är inloggad i Azure CLI. När programmet distribueras till Azure kan samma DefaultAzureCredential kod automatiskt identifiera och använda en hanterad identitet som har tilldelats till en App Service, virtuell dator eller andra tjänster. Mer information finns i Översikt över hanterad identitet.

I den här koden används namnet på ditt nyckelvalv för att skapa nyckelvalvets URI i formatet https://<your-key-vault-name>.vault.azure.net. Mer information om autentisering till nyckelvalv finns i Utvecklarguide.

Kodexempel

Den här koden använder följande Key Vault-certifikatklasser och -metoder:

Konfigurera appramverket

  1. Skapa en ny textfil och klistra in följande kod i filen index.js .

    const { CertificateClient, DefaultCertificatePolicy } = require("@azure/keyvault-certificates");
    const { DefaultAzureCredential } = require("@azure/identity");
    
    async function main() {
      // If you're using MSI, DefaultAzureCredential should "just work".
      // Otherwise, DefaultAzureCredential expects the following three environment variables:
      // - AZURE_TENANT_ID: The tenant ID in Azure Active Directory
      // - AZURE_CLIENT_ID: The application (client) ID registered in the AAD tenant
      // - AZURE_CLIENT_SECRET: The client secret for the registered application
      const credential = new DefaultAzureCredential();
    
      const keyVaultName = process.env["KEY_VAULT_NAME"];
      if(!keyVaultName) throw new Error("KEY_VAULT_NAME is empty");
      const url = "https://" + keyVaultName + ".vault.azure.net";
    
      const client = new CertificateClient(url, credential);
    
      const uniqueString = new Date().getTime();
      const certificateName = `cert${uniqueString}`;
    
      // Creating a self-signed certificate
      const createPoller = await client.beginCreateCertificate(
        certificateName,
        DefaultCertificatePolicy
      );
    
      const pendingCertificate = createPoller.getResult();
      console.log("Certificate: ", pendingCertificate);
    
      // To read a certificate with their policy:
      let certificateWithPolicy = await client.getCertificate(certificateName);
      // Note: It will always read the latest version of the certificate.
    
      console.log("Certificate with policy:", certificateWithPolicy);
    
      // To read a certificate from a specific version:
      const certificateFromVersion = await client.getCertificateVersion(
        certificateName,
        certificateWithPolicy.properties.version
      );
      // Note: It will not retrieve the certificate's policy.
      console.log("Certificate from a specific version:", certificateFromVersion);
    
      const updatedCertificate = await client.updateCertificateProperties(certificateName, "", {
        tags: {
          customTag: "value"
        }
      });
      console.log("Updated certificate:", updatedCertificate);
    
      // Updating the certificate's policy:
      await client.updateCertificatePolicy(certificateName, {
        issuerName: "Self",
        subject: "cn=MyOtherCert"
      });
      certificateWithPolicy = await client.getCertificate(certificateName);
      console.log("updatedCertificate certificate's policy:", certificateWithPolicy.policy);
    
      // delete certificate
      const deletePoller = await client.beginDeleteCertificate(certificateName);
      const deletedCertificate = await deletePoller.pollUntilDone();
      console.log("Recovery Id: ", deletedCertificate.recoveryId);
      console.log("Deleted Date: ", deletedCertificate.deletedOn);
      console.log("Scheduled Purge Date: ", deletedCertificate.scheduledPurgeDate);
    }
    
    main().catch((error) => {
      console.error("An error occurred:", error);
      process.exit(1);
    });
    

Köra exempelprogrammet

  1. Kör appen:

    node index.js
    
  2. Metoderna create and get returnerar ett fullständigt JSON-objekt för certifikatet:

    {
      "keyId": undefined,
      "secretId": undefined,
      "name": "YOUR-CERTIFICATE-NAME",
        "reuseKey": false,
        "keyCurveName": undefined,
        "exportable": true,
        "issuerName": 'Self',
        "certificateType": undefined,
        "certificateTransparency": undefined
      },
      "properties": {
        "createdOn": 2021-11-29T20:17:45.000Z,
        "updatedOn": 2021-11-29T20:17:45.000Z,
        "expiresOn": 2022-11-29T20:17:45.000Z,
        "id": "https://YOUR-KEY-VAULT-NAME.vault.azure.net/certificates/YOUR-CERTIFICATE-NAME/YOUR-CERTIFICATE-VERSION",
        "enabled": false,
        "notBefore": 2021-11-29T20:07:45.000Z,
        "recoveryLevel": "Recoverable+Purgeable",
        "name": "YOUR-CERTIFICATE-NAME",
        "vaultUrl": "https://YOUR-KEY-VAULT-NAME.vault.azure.net",
        "version": "YOUR-CERTIFICATE-VERSION",
        "tags": undefined,
        "x509Thumbprint": undefined,
        "recoverableDays": 90
      }
    }
    

Integrera med App Configuration

Azure SDK tillhandahåller en hjälpmetod, parseKeyVaultCertificateIdentifier, för att parsa det angivna Key Vault-certifikat-ID:t, vilket är nödvändigt om du använder appkonfigurationsreferenser till Key Vault. Appkonfiguration lagrar Key Vault-certifikat-ID:t. Du behöver metoden parseKeyVaultCertificateIdentifier för att parsa det ID:t för att hämta certifikatnamnet. När du har certifikatnamnet kan du hämta det aktuella certifikatet med hjälp av kod från den här snabbstarten.

Nästa steg

I den här snabbstarten skapade du ett nyckelvalv, lagrade ett certifikat och hämtade certifikatet. Om du vill veta mer om Key Vault och hur du integrerar det med dina program fortsätter du till de här artiklarna.