Compartir vía


Autenticación de aplicaciones de C++ en servicios de Azure durante el desarrollo local mediante cuentas de desarrollador

Durante el desarrollo local, las aplicaciones deben autenticarse en Azure para usar diferentes servicios de Azure. Autentíquese localmente mediante uno de estos enfoques:

En este artículo se explica cómo autenticarse mediante una cuenta de desarrollador con herramientas compatibles con la biblioteca de identidades de Azure. En las secciones siguientes, obtendrá información sobre lo siguiente:

  • Cómo usar grupos de Microsoft Entra para administrar de forma eficaz los permisos de varias cuentas de desarrollador.
  • Asignación de roles a cuentas de desarrollador para definir el ámbito de los permisos.
  • Cómo iniciar sesión en las herramientas de desarrollo local admitidas.
  • Autenticación mediante una cuenta de desarrollador desde el código de la aplicación.

Herramientas de desarrollo compatibles para la autenticación

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 mediante la CLI de Azure.

La biblioteca de identidades de Azure puede detectar que el desarrollador ha iniciado sesión desde la herramienta. La biblioteca puede entonces obtener el token de acceso de Microsoft Entra a través de la herramienta para autenticar la aplicación en Azure como el usuario autentificado.

Este enfoque aprovecha las cuentas de Azure existentes del desarrollador para simplificar el proceso de autenticación. Sin embargo, es probable que la cuenta de un desarrollador tenga más permisos de los que requiere la aplicación, por lo que supera los permisos con los que se ejecuta la aplicación en producción. Como alternativa, puede crear principales de servicio de aplicación para usarlos durante el desarrollo local, que se pueden limitar a tener solo el acceso necesario para la aplicación.

Creación de un grupo de Microsoft Entra para el desarrollo local

Cree un grupo de Microsoft Entra para encapsular los roles (permisos) que la aplicación necesita en el desarrollo local en lugar de asignar los roles a objetos de entidad de servicio individuales. Este procedimiento ofrece las siguientes ventajas:

  • Cada desarrollador tiene los mismos roles asignados en el nivel de grupo.
  • Si se necesita un nuevo rol para la aplicación, solo debe agregarse al grupo de la aplicación.
  • Si un nuevo desarrollador se une al equipo, se crea un nuevo principal de servicio de la aplicación para el desarrollador y se agrega al grupo, garantizando que el desarrollador tenga los permisos adecuados para trabajar en la aplicación.
  1. Vaya a la página de descripción general de Microsoft Entra ID en el portal de Azure.

  2. Seleccione Todos los grupos en el menú de la izquierda.

  3. En la página Grupos , seleccione Nuevo grupo.

  4. En la página Nuevo grupo , rellene los siguientes campos de formulario:

    • Tipo de grupo: seleccione Seguridad.
    • Nombre del grupo: escriba un nombre para el grupo que incluya una referencia al nombre de la aplicación o del entorno.
    • Descripción del grupo: escriba una descripción que explique el propósito del grupo.

    Captura de pantalla que muestra cómo crear un grupo en Azure Portal.

  5. Seleccione el vínculo Sin miembros seleccionados en Miembros para agregar miembros al grupo.

  6. En el panel flotante que se abre, busque la entidad de servicio que creó anteriormente y selecciónela en los resultados filtrados. Elija el botón Seleccionar situado en la parte inferior del panel para confirmar la selección.

  7. Seleccione Crear en la parte inferior de la página Nuevo grupo para crear el grupo y volver a la página Todos los grupos . Si no ve el nuevo grupo en la lista, espere un momento y actualice la página.

Asignación de roles al grupo

A continuación, determine qué roles (permisos) necesita la aplicación en qué recursos y asigne esos roles al grupo de Microsoft Entra que ha creado. A los grupos se les puede asignar 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.

  1. En Azure Portal, vaya a la página Información general del grupo de recursos que contiene la aplicación.

  2. Seleccione Control de acceso (IAM) en el panel de navegación izquierdo.

  3. En la página Control de acceso (IAM), seleccione + Agregar y, a continuación, elija Agregar asignación de roles en el menú desplegable. La página Agregar asignación de roles proporciona varias pestañas para configurar y asignar roles.

  4. En la pestaña Rol , use el cuadro de búsqueda para buscar el rol que desea asignar. Seleccione el rol y, a continuación, elija Siguiente.

  5. En la pestaña Miembros :

    • En Asignar acceso al valor, seleccione Usuario, grupo o entidad de servicio .
    • Para el valor Miembros , elija + Seleccionar miembros para abrir el panel flotante Seleccionar miembros .
    • Busque el grupo Microsoft Entra que creó anteriormente y selecciónelo en los resultados filtrados. Elija Seleccionar para seleccionar el grupo y cerrar el panel flotante.
    • Seleccione Revisar y asignar en la parte inferior de la pestaña Miembros .

    Captura de pantalla que muestra cómo asignar un rol al grupo Microsoft Entra.

  6. En la pestaña Revisar y asignar , seleccione Revisar y asignar en la parte inferior de la página.

Inicio de sesión en Azure mediante herramientas para desarrolladores

Inicie sesión en Azure mediante una de varias herramientas de desarrollo que se pueden usar para realizar la autenticación en el entorno de desarrollo. La cuenta con la que se autentique también debe existir en el grupo de Microsoft Entra que creó y configuró anteriormente.

CLI de Azure

Los desarrolladores pueden usar la CLI de Azure para autenticarse. Las aplicaciones que usan DefaultAzureCredential o AzureCliCredential pueden usar esta cuenta para autenticar las solicitudes de aplicación.

Para autenticarse con la CLI de Azure, ejecute el az login comando . En un sistema con un explorador web predeterminado, la CLI de Azure inicia el explorador para autenticar al usuario.

az login

En el caso de los sistemas sin un explorador web predeterminado, el comando az login usa el flujo de autenticación de código de dispositivo. El usuario también puede forzar a la CLI de Azure a usar el flujo de código del dispositivo en lugar de iniciar un explorador especificando el argumento --use-device-code.

az login --use-device-code

Autenticación en servicios de Azure desde la aplicación

La biblioteca de identidades de Azure para C++ proporciona varias credenciales adaptadas para admitir diferentes escenarios y flujos de autenticación de Microsoft Entra. Los pasos que se indican a continuación muestran cómo usar DefaultAzureCredential al trabajar con cuentas de usuario localmente.

Implementación del código

La clase DefaultAzureCredential es una secuencia ordenada de mecanismos para autenticarse en microsoft Entra ID. Cada mecanismo de autenticación es una clase derivada de la TokenCredential clase y se conoce como credencial. En este escenario, DefaultAzureCredential comprueba secuencialmente si el desarrollador ha iniciado sesión en Azure mediante la CLI de Azure. Si el desarrollador ha iniciado sesión en la CLI de Azure, la aplicación usa las credenciales que se usan para iniciar sesión en la herramienta para autenticarse en Azure. Para obtener más información sobre cómo personalizar la cadena de credenciales, consulte Personalización de DefaultAzureCredential.

  1. Agregue el paquete azure-identity-cpp a la aplicación mediante vcpkg.

    vcpkg add port azure-identity-cpp
    
  2. Agregue las líneas siguientes en el archivo CMake:

    find_package(azure-identity-cpp CONFIG REQUIRED)
    target_link_libraries(<your project name> PRIVATE Azure::azure-identity)
    
  3. Para cualquier código de C++ que cree un objeto de cliente de Azure SDK en tu aplicación, quieres:

    1. Incluya el azure/identity.hpp encabezado .

    2. Use DefaultAzureCredential o AzureCliCredential para crear una instancia de una credencial. Por ejemplo:

      • Para usar DefaultAzureCredential, establezca la variable de entorno AZURE_TOKEN_CREDENTIALS a dev que indica que la aplicación se ejecuta en un entorno de desarrollo. Para obtener más información, consulte Personalización de DefaultAzureCredential.

        // Environment variable AZURE_TOKEN_CREDENTIALS=dev
        auto credential = std::make_shared<Azure::Identity::DefaultAzureCredential>(true);
        
      • O bien, use AzureCliCredential para usar siempre el usuario que ha iniciado sesión de la CLI de Azure para autenticarse.

        auto credential = std::make_shared<Azure::Identity::AzureCliCredential>();
        
    3. Pase la instancia de DefaultAzureCredential o AzureCliCredential al constructor de cliente del SDK de Azure.

    En el siguiente segmento de código se muestra un ejemplo de estos pasos. En el ejemplo se crea un cliente de blobs de Azure Storage mediante DefaultAzureCredential para autenticarse en Azure.

    #include <azure/identity.hpp>
    #include <azure/storage/blobs.hpp>
    #include <iostream>
    #include <memory>
    
    int main() {
        try {
            // DefaultAzureCredential supports dev, test, and prod environments.
            // See documentation for details on customizing the credential chain:
            // https://learn.microsoft.com/azure/developer/cpp/sdk/authentication/credential-chains#defaultazurecredential-overview
            // In production, it's better to use a specific credential type so authentication is more predictable and easier to debug.
            // Here DefaultAzureCredential is used for local development and environment variable AZURE_TOKEN_CREDENTIALS=dev
    
            auto credential = std::make_shared<Azure::Identity::DefaultAzureCredential>(true);
    
            // Or use AzureCliCredential to always use the Azure CLI signed-in user to authenticate
            // auto credential = std::make_shared<Azure::Identity::AzureCliCredential>();
    
            // Create a client for the specified storage account
            std::string accountUrl = "https://<replace_with_your_storage_account_name>.blob.core.windows.net/";
            Azure::Storage::Blobs::BlobServiceClient blobServiceClient(accountUrl, credential);
    
            // Get a reference to a container
            std::string containerName = "sample-container";
            auto containerClient = blobServiceClient.GetBlobContainerClient(containerName);
    
            // TODO: perform some action with the blob client
            // auto blobClient = containerClient.GetBlobClient("sample-blob");
            // auto downloadResult = blobClient.DownloadTo("path/to/local/file");
    
        } catch (const std::exception& ex) {
            std::cout << "Exception: " << ex.what() << std::endl;
            return 1;
        }
    
        return 0;
    }