Autenticación de aplicaciones de JavaScript en servicios de Azure durante el desarrollo local mediante cuentas de desarrollador
Artículo
Al crear aplicaciones en la nube, los desarrolladores deben depurar y probar aplicaciones en su estación de trabajo local. Cuando se ejecuta una aplicación en la estación de trabajo de un desarrollador durante el desarrollo local, esta debe autenticarse en los servicios de Azure que usa. En este artículo se explica cómo usar las credenciales de Azure de un desarrollador para autenticar la aplicación en Azure durante el desarrollo local.
Para que una aplicación se autentique en Azure durante el desarrollo local mediante las credenciales de Azure del desarrollador, el desarrollador debe iniciar sesión en Azure desde la extensión Azure Tools de Visual Studio Code, la CLI de Azure o Azure PowerShell. El SDK de Azure para JavaScript puede detectar que el desarrollador ha iniciado sesión desde una de estas herramientas y, a continuación, obtener las credenciales necesarias de la memoria caché de credenciales para autenticar la aplicación en Azure como el usuario que ha iniciado sesión.
Este enfoque es más fácil de configurar para un equipo de desarrollo, ya que aprovecha las cuentas de Azure existentes de los desarrolladores. Sin embargo, es probable que la cuenta de un desarrollador tenga más permisos de los que requiere la aplicación, por lo que superará los permisos con los que se ejecuta la aplicación en producción. Como alternativa, puede crear entidades de servicio de aplicación para usarlas durante el desarrollo local que se pueden limitar para tener solo el acceso necesario para la aplicación.
1: Creación de un grupo de Microsoft Entra para el desarrollo local
Puesto que casi siempre hay varios desarrolladores que trabajan en una aplicación, se recomienda crear primero un grupo de Microsoft Entra para encapsular los roles (permisos) que la aplicación necesita en el desarrollo local. Esto ofrece las ventajas que se indican a continuación.
Todos los desarrolladores están seguros de tener asignados los mismos roles, ya que los roles se asignan en el nivel de grupo.
Si se necesita un nuevo rol para la aplicación, solo es necesario agregarlo al grupo Microsoft Entra para la aplicación.
Si un nuevo desarrollador se une al equipo, simplemente debe agregarse al grupo correcto de Microsoft Entra para obtener los permisos correctos para trabajar en la aplicación.
Si tiene un grupo de Microsoft Entra existente para el equipo de desarrollo, puede usar ese grupo. De lo contrario, complete los pasos que se describen a continuación para crear un grupo de Microsoft Entra.
Vaya a la página de Microsoft Entra ID en Azure Portal escribiendo Microsoft Entra ID en el cuadro de búsqueda de la parte superior de la página y, a continuación, seleccionando Microsoft Entra ID en Servicios.
En la página Microsoft Entra ID, seleccione Grupos en el menú de la izquierda.
En la página Todos los grupos, seleccione Nuevo grupo.
En la página Nuevo grupo:
Tipo de grupo → Seguridad.
Nombre de grupo → Nombre del grupo de seguridad, que normalmente se crea a partir del nombre de la aplicación. También resulta útil incluir una cadena como local-dev en el nombre del grupo para indicar el propósito del grupo.
Descripción del grupo → Descripción del propósito del grupo.
Seleccione el vínculo Sin miembros seleccionados en Miembros para agregar miembros al grupo.
En el cuadro de diálogo Agregar miembros:
Use el cuadro de búsqueda para filtrar la lista de nombres de usuario en la lista.
Seleccione uno o más usuarios para el desarrollo local de esta aplicación. Al elegir un objeto, el objeto se mueve a la lista Elementos seleccionados en la parte inferior del cuadro de diálogo.
Cuando haya terminado, pulse el botón Seleccionar.
De nuevo en la página Nuevo grupo, seleccione Crear para crear el grupo.
El grupo se creará y volverá a la página Todos los grupos. El grupo puede tardar hasta 30 segundos en aparecer y es posible que tenga que actualizar la página debido al almacenamiento en caché en Azure Portal.
El comando az ad group create se usa para crear grupos en Microsoft Entra ID. Los parámetros --display-name y --main-nickname son obligatorios. El nombre proporcionado al grupo debe basarse en el nombre de la aplicación. También resulta útil incluir una cadena como “local-dev” en el nombre del grupo para indicar el propósito del grupo.
az ad group create \
--display-name MyDisplay \
--mail-nickname MyDisplay \
--description <group-description>
Para agregar miembros al grupo, necesitará el id. de objeto del usuario de Azure. Use az ad user list para enumerar las entidades de servicio disponibles. El comando del parámetro --filter acepta filtros de estilo OData y se puede usar para filtrar la lista por el nombre para mostrar del usuario, tal y como se muestra. El --query parámetro devuelve columnas especificadas.
az ad user list \
--filter "startswith(displayName, 'Bob')" \
--query "[].{objectId:objectId, displayName:displayName}" \
--output table
az ad group member add \
--group <group-name> \
--member-id <object-id>
2: Asignación de roles al grupo de Microsoft Entra
A continuación, debe determinar qué roles (permisos) necesita la aplicación y en qué recursos y asignar dichos roles a la aplicación. En este ejemplo, los roles se asignan al grupo de Microsoft Entra creado en el paso 1. Los roles se pueden asignar a un rol en el á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.
Busque el grupo de recursos de la aplicación; para ello, busque el nombre del grupo de recursos mediante el cuadro de búsqueda situado en la parte superior de Azure Portal.
Vaya al grupo de recursos. Para ello, seleccione el nombre del grupo de recursos en el encabezado Grupos de recursos del cuadro de diálogo.
En la página del grupo de recursos, seleccione Control de acceso (IAM) en el menú izquierdo.
En la página Control de acceso (IAM):
Seleccione la pestaña Asignaciones de roles.
Seleccione + Agregar en el menú superior y, a continuación, Agregar asignación de roles en el menú desplegable resultante.
La página Agregar asignación de roles muestra todos los roles que se pueden asignar para el grupo de recursos.
Use el cuadro de búsqueda para filtrar la lista a un tamaño más fácil de administrar. En este ejemplo se muestra cómo filtrar los roles de Storage Blob.
Seleccione el rol que quiere asignar.
Seleccione Siguiente para ir a la pantalla siguiente.
La siguiente página Agregar asignación de roles permite especificar a qué usuario se debe asignar el rol.
Seleccione Usuario, grupo o entidad de servicio en Asignar acceso a.
Seleccione + Seleccionar miembros en Miembros.
Se abrirá un cuadro de diálogo en el lado derecho de Azure Portal.
En el cuadro de diálogo Seleccionar miembros:
El cuadro de texto Seleccionar se puede usar para filtrar la lista de usuarios y grupos de la suscripción. Si es necesario, escriba los primeros caracteres del grupo de desarrollo local de Microsoft Entra que creó para la aplicación.
Seleccione el grupo de desarrollo local de Microsoft Entra asociado a la aplicación.
Seleccione Seleccionar en la parte inferior del cuadro de diálogo para continuar.
El grupo de Microsoft Entra se mostrará ahora como seleccionado en la pantalla Agregar asignación de roles.
Seleccione Revisar y asignar para ir a la página final y, a continuación, Revisar y asignar de nuevo para completar el proceso.
Se asignará un rol a la entidad de servicio de la aplicación en Azure mediante el comando az role assignment create.
az role assignment create --assignee "{appId}" \
--scope /subscriptions/"{subscriptionName}" \
--role "{roleName}" \
--resource-group "{resourceGroupName}"
Para obtener los nombres de roles a los que se puede asignar una entidad de servicio, use el comando az role definition list.
az role definition list --query "sort_by([].{roleName:roleName, description:description}, &roleName)" --output table
Por ejemplo, para permitir que la entidad de servicio de la aplicación lea, escriba y elimine el acceso a los contenedores de blobs de Azure Storage y a todos los datos de todas las cuentas de almacenamiento del grupo de recursos msdocs-sdk-auth-example , asignaría la entidad de servicio de la aplicación al rol Colaborador de datos de Storage Blob mediante el siguiente comando.
az role assignment create --assignee "aaaaaaaa-bbbb-cccc-7777-888888888888" \
--scope /subscriptions/"Storage Blob Data Subscriber" \
--role "Storage Blob Data Contributor" \
--resource-group "msdocs-sdk-auth-example"
Abra un terminal en la estación de trabajo del desarrollador e inicie sesión en Azure desde Azure PowerShell.
Connect-AzAccount
4: Implementación de DefaultAzureCredential en la aplicación
Para autenticar objetos de cliente del SDK de Azure en Azure, la aplicación debe usar la clase DefaultAzureCredential del paquete @azure/identity. En este escenario, DefaultAzureCredential comprobará secuencialmente si el desarrollador ha iniciado sesión en Azure mediante la extensión de herramientas de Azure de VS Code, la CLI de Azure o Azure PowerShell. Si el desarrollador ha iniciado sesión en Azure con cualquiera de estas herramientas, la aplicación usará las credenciales usadas para iniciar sesión en la herramienta para autenticarse en Azure.
A continuación, para cualquier código JavaScript que cree un objeto de cliente del SDK de Azure en la aplicación, querrá:
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 segmento de código siguiente se muestra un ejemplo de esto.
import { BlobServiceClient } from '@azure/storage-blob';
import { DefaultAzureCredential } from '@azure/identity';
// Acquire a credential object
const tokenCredential = DefaultAzureCredential();
const blobServiceClient = BlobServiceClient(
`https://${accountName}.blob.core.windows.net`,
tokenCredential
);
DefaultAzureCredential detectará automáticamente el mecanismo de autenticación configurado para la aplicación y obtendrá los tokens necesarios para autenticar la aplicación en Azure. Si una aplicación usa más de un cliente del SDK, se puede usar el mismo objeto de credencial con cada objeto cliente del SDK.