Autenticación de aplicaciones JavaScript hospedadas en Azure en recursos de Azure mediante la biblioteca de identidades de Azure
Cuando una aplicación se hospeda en Azure (mediante un servicio como Azure App Service, Azure Functions o Azure Container Apps), puede usar una identidad administrada para autenticar de forma segura la aplicación en los recursos de Azure.
Una identidad administrada proporciona una identidad para la aplicación, lo que le permite conectarse a otros recursos de Azure sin necesidad de usar un secreto (como una cadena de conexión o una clave). Internamente, Azure reconoce la identidad de la aplicación y sabe a qué recursos está autorizado la aplicación para acceder. Azure usa esta información para obtener automáticamente tokens de Microsoft Entra para la aplicación, lo que le permite conectarse a otros recursos de Azure sin necesidad de administrar (crear o rotar) secretos de autenticación.
Tipos de identidad administrada
Hay dos tipos de identidades administradas:
- Identidades administradas asignadas por el sistema: un único recurso de Azure
- Identidades administradas asignadas por el usuario: varios recursos de Azure
En este artículo se describen los pasos para habilitar y usar una identidad administrada asignada por el sistema para una aplicación. Si necesita usar una identidad administrada asignada por el usuario, consulte el artículo Administración de identidades administradas asignadas por el usuario para obtener información sobre cómo crear una identidad administrada asignada por el usuario.
Identidades administradas asignadas por el sistema para un único recurso
Las identidades administradas asignadas por el sistema se proporcionan y están vinculadas directamente a un recurso de Azure. Al habilitar la identidad administrada en un recurso de Azure, obtendrá una identidad administrada asignada por el sistema para ese recurso. La identidad administrada está vinculada al ciclo de vida del recurso de Azure. Por tanto, cuando se elimina el recurso, Azure elimina automáticamente la identidad. Dado que todo lo que tiene que hacer es habilitar la identidad administrada para el recurso de Azure que hospeda el código, este tipo de identidad es el tipo más sencillo de identidad administrada que se va a usar.
Identidades administradas asignadas por el usuario para varios recursos
Una identidad administrada asignada por el usuario es un recurso de Azure independiente. Este tipo de identidad se usa con más frecuencia cuando la solución tiene varias cargas de trabajo que se ejecutan en varios recursos de Azure que todos necesitan compartir la misma identidad y los mismos permisos. Por ejemplo, supongamos que la solución incluye aplicaciones que se ejecutan en varias instancias de App Service y de máquina virtual. Todas las aplicaciones necesitan acceso al mismo conjunto de recursos de Azure. La creación y el uso de una identidad administrada asignada por el usuario en esos recursos es la mejor opción de diseño.
1- Habilitación de la identidad administrada asignada por el sistema en la aplicación hospedada
El primer paso es habilitar la identidad administrada en el recurso de Azure que hospeda la aplicación. Por ejemplo, si hospeda una aplicación de Express.js mediante Azure App Service, debe habilitar la identidad administrada para esa aplicación web de App Service. Si usa una máquina virtual para hospedar la aplicación, habilite la máquina virtual para que use la identidad administrada.
Puede habilitar la identidad administrada para que se use para un recurso de Azure mediante Azure Portal o la CLI de Azure.
2: Asignación de roles a la identidad administrada
A continuación, debe determinar qué roles (permisos) necesita la aplicación y asignar la identidad administrada a dichos roles en Azure. Se pueden asignar roles a una identidad administrada en un ámbito de recurso, grupo de recursos o suscripción. En este ejemplo se muestra cómo asignar roles en el ámbito del grupo de recursos, ya que la mayoría de las aplicaciones agrupan todos sus recursos de Azure en un único grupo de recursos.
3: Implementación de DefaultAzureCredential en la aplicación
DefaultAzureCredential detecta automáticamente que se usa una identidad administrada y usa la identidad administrada para autenticarse en otros recursos de Azure. Como se describe en el artículo Información general sobre la autenticación de la biblioteca de identidades de Azure para JavaScript, DefaultAzureCredential
admite varios métodos de autenticación y determina el método de autenticación que se usa en tiempo de ejecución. De este modo, la aplicación puede usar diferentes métodos de autenticación en distintos entornos sin implementar código específico del entorno.
Primero, agregue el paquete @azure/identity a la aplicación.
npm install @azure/identity
A continuación, para cualquier código javaScript que cree un objeto de cliente del SDK de Azure en la aplicación, quiere:
- Importar la clase
DefaultAzureCredential
desde el módulo@azure/identity
. - Crear un objeto
DefaultAzureCredential
. - Pasar el objeto
DefaultAzureCredential
al constructor de objetos de cliente del SDK de Azure.
En el siguiente segmento de código se muestra un ejemplo de estos pasos.
// connect-with-default-azure-credential.js
import { BlobServiceClient } from '@azure/storage-blob';
import { DefaultAzureCredential } from '@azure/identity';
import 'dotenv/config'
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
if (!accountName) throw Error('Azure Storage accountName not found');
const blobServiceClient = new BlobServiceClient(
`https://${accountName}.blob.core.windows.net`,
new DefaultAzureCredential()
);