Autenticación en Azure para entornos de desarrollo y tiempo de ejecución

Para autenticarse en Azure, cree una entidad de servicio que utilice los SDK de Azure para JavaScript.

Autenticación en la plataforma de Azure

Por lo general, para la mayoría de los servicios y funcionalidades, debe autenticarse con un método de credencial de identidad para crear un token. El token se pasa al SDK para autorizar su uso. Hay varios métodos de credencial; algunos requieren una configuración más amplia, pero se han creado para su uso en un servicio de producción.

Busque instrucciones específicas del paquete para autenticarse en cada paquete de Azure SDK de npm readme.md.

Autenticación interactiva para inicios rápidos y tutoriales

Para usar un inicio rápido o un tutorial para los servicios de Azure, el método de credencial más rápido es el inicio de sesión interactivo. Con este método, puede completar algunos pasos rápidos:

  1. Ejecute el código.
  2. Se muestra un mensaje con una dirección URL de autenticación y un token.
  3. Abra un explorador en esa dirección URL y escriba el token. En función de los requisitos de autenticación de Azure, puede ser necesario realizar un segundo paso de autenticación.
  4. Cuando haya completado la autenticación, puede cerrar el explorador.
  5. El código continúa su ejecución.

Un ejemplo de autenticación de inicio de sesión interactivo en un explorador requiere la configuración del inquilino y el identificador de cliente para la aplicación de Azure Active Directory en la que se autentica. Un ejemplo de este código es el siguiente:

function withInteractiveBrowserCredential() {
  const credential = new InteractiveBrowserCredential({
    tenantId: "<YOUR_TENANT_ID>",
    clientId: "<YOUR_CLIENT_ID>"
  });

  const client = new SecretClient("https://key-vault-name.vault.azure.net", credential);
}

Dado que este método requiere un inicio de sesión interactivo cada vez que se ejecuta el código, querrá reemplazar este método por un método de credenciales no interactivo una vez que esté listo para comenzar el trabajo de desarrollo para la plataforma Azure.

Dado que este código no usa ningún secreto de autenticación, puede comprobar este código en el control de código fuente.

Autenticación de Azure para desarrollo y producción

Cuando esté listo para comenzar el trabajo de desarrollo, se recomienda seleccionar DefaultAzureCredential. Este método de credencial proporciona la ventaja de usar el mismo código en desarrollo y en producción sin necesidad de almacenar ni usar secretos.

Este método requiere una configuración tanto en el entorno de desarrollo local como en el entorno de producto remoto.

1. Creación de una entidad de servicio

Cree una entidad de servicio y configure su acceso a los recursos de Azure. La entidad de servicio es obligatoria para usar DefaultAzureCredential.

  1. Cree la entidad de servicio con el comando az ad sp create-for-rbac de Azure mediante la CLI de Azure o Cloud Shell.

    az ad sp create-for-rbac --name YOUR-SERVICE-PRINCIPAL-NAME
    
  2. La respuesta del comando incluye secretos que debe almacenar de forma segura, por ejemplo, en Azure Key Vault:

    {
      "appId": "YOUR-SERVICE-PRINCIPAL-ID",
      "displayName": "YOUR-SERVICE-PRINCIPAL-NAME",
      "name": "http://YOUR-SERVICE-PRINCIPAL-NAME",
      "password": "!@#$%",
      "tenant": "YOUR-TENANT-ID"
    }
    

También puede crear una entidad de servicio con:

2. Configuración de las variables de entorno

Debe configurar las siguientes variables de entorno en el entorno local y en la nube de Azure. No cambie el nombre, porque el SDK de Azure Identity requiere estos nombres de entorno exactos.

  1. Cree estas variables de entorno. Estas variables de entorno son NECESARIAS para que el contexto use DefaultAzureCredential.

    • AZURE_TENANT_ID: valor de tenant de la salida de la entidad de servicio anterior.
    • AZURE_CLIENT_ID: valor de appId de la salida de la entidad de servicio anterior.
    • AZURE_CLIENT_SECRET: valor de password de la salida de la entidad de servicio anterior.
  2. Cree esta variable de entorno. Esta configuración no es necesaria para usar DefaultAzureCredential, pero se emplea en el código de la sección siguiente.

    • AZURE_SUBSCRIPTION: la suscripción predeterminada que contiene los grupos de recursos.

3. Enumeración de los grupos de recursos de Azure con la entidad de servicio

Utilice la nueva entidad de servicio par autenticarse en Azure.

  1. Instale las dependencias: Azure SDK para Identity, SDK de Azure Resource Manager y stringify-object (para proporcionar solo código JSON legible).

    npm install @azure/identity @azure/arm-resources stringify-object --save
    
  2. Cree un archivo de JavaScript, llamado resource-groups-list.js, con el código siguiente:

    // Include npm dependencies
    const { DefaultAzureCredential } = require("@azure/identity");
    const { ResourceManagementClient } = require("@azure/arm-resources");
    
    // Get subscription from environment variables
    const subscriptionId = process.env["AZURE_SUBSCRIPTION"];
    if (!subscriptionId) throw Error("Azure Subscription is missing from environment variables.")
    
    // The following code is only used to check you have environment
    // variables configured. The DefaultAzureCredential reads your
    // environment - it doesn't read these variables. 
    const tenantId = process.env["AZURE_TENANT_ID"];
    if (!tenantId) throw Error("AZURE_TENANT_ID is missing from environment variables.")
    const clientId = process.env["AZURE_CLIENT_ID"];
    if (!clientId) throw Error("AZURE_CLIENT_ID is missing from environment variables.")
    const secret = process.env["AZURE_CLIENT_SECRET"];
    if (!secret) throw Error("AZURE_CLIENT_SECRET is missing from environment variables.")
    
    // Create Azure authentication credentials
    const credentials = new DefaultAzureCredential();
    
    // Create Azure SDK client for Resource Management such as resource groups
    const resourceManagement = new ResourceManagementClient(credentials, subscriptionId);
    
    // List resource groups in subscription
    resourceManagement.resourceGroups.list()
    .then(result=>{
    
        console.log(JSON.stringify(result));
    
    }).catch(err=>{console.log(err)});
    
  3. Ejecute el archivo para ver la lista de grupos de recursos:

    node  resource-groups-list.js
    
  4. Vea el código de ejemplo completo y package.json:

Pasos siguientes