Creación de un conector para aplicaciones de funciones de Azure protegidas por Microsoft Entra ID

Un principio clave de los conectores de Microsoft Power Apps que usan Microsoft Entra ID para la autenticación es que no proporcionan a los usuarios acceso a ningún dato al que no tengan acceso ya. Esto se debe a que la llamada API al servicio protegido de Microsoft Entra ID–se ejecuta con la identidad de usuario que se utilizó para iniciar sesión en el conector. Por lo tanto, el servicio de destino es el responsable de aplicar lo que se permite al usuario autenticado.

En este tutorial se muestra cómo usar Azure Functions para compilar una API REST, habilitar la autenticación de Microsoft Entra ID y, a continuación, ponerla a disposición de Power Apps como un conector personalizado.

Crear aplicaciones de función de Azure usando Visual Studio Code

Con Azure Functions, tiene muchas opciones que hay que tener en cuenta, entre las que se incluyen las opciones de hospedaje, elección del lenguaje y las opciones de creación como el uso de Azure Portal, Visual Studio Code o Visual Studio. En este tutorial, se utilizará C# y Visual Studio Code. Para completar este tutorial, primero debe completar el tutorial Inicio rápido: crear una función C# en Azure con Visual Studio Code. Anote el nombre que proporcionó para la aplicación de funciones en el paso Crear la aplicación de función en Azure.

Importante

No complete la sección Limpieza de recursos en el Inicio rápido. Deberá conservar todos los recursos para crear a partir de lo que ya tiene hecho.

Protección de llamadas a aplicaciones de función de Azure mediante Microsoft Entra ID

  1. Busque su aplicación de funciones en Azure Portal. Seleccione el nombre de la aplicación de funciones en la lista.

    Lista de aplicaciones de funciones en Azure Portal.

  2. Seleccione la pestaña Características de plataforma.

    Pestaña Características de la plataforma resaltada en la hoja de la aplicación de funciones de Azure Portal.

  3. En el grupo Redes, seleccione el vínculo Autenticación/autorización.

    Vínculo Autenticación/autorización resaltado en la hoja de aplicaciones de funciones de Azure Portal.

  4. En la hoja Autorización de autenticación, active Autenticación del servicio de aplicaciones.

    Opción Activado del botón de alternancia Autenticación de App Service resaltada en la configuración de autenticación de la aplicación de funciones en Azure Portal.

  5. En la lista desplegable Acción a realizar cuando no se autentique la solicitud, cambie el valor a Iniciar sesión con Azure Active Directory. Esta opción garantiza que no se permitirán las solicitudes anónimas a la API.

    La opción "Iniciar sesión con Azure Active Directory" resaltada en la lista desplegable "Acción a realizar cuando no se autentique la solicitud" en la hoja configuración de autenticación de la aplicación de funciones.

  6. A continuación, en la lista de proveedores de autenticación, seleccione Azure Active Directory.

    "Azure Active Directory" resaltado en la lista de proveedores de autenticación de una aplicación de funciones

  7. En la hoja Configuración de Azure Active Directory, establezca la opción Modo de administración en Rápido. Establezca la segunda opción de Modo de administración en Crear nueva aplicación de AD.

    Hoja Configuración de Azure Active Directory abierta para una aplicación de funciones en Azure Portal.

    Importante

    Antes de continuar, copie el valor del campo Crear aplicación y péguelo en algún lugar para más adelante. Este valor representa el nombre de la aplicación de Microsoft Entra ID que se usará para proteger la API. Usará este valor más adelante cuando configure el conector personalizado.

  8. Seleccione Aceptar para confirmar su selección.

  9. De nuevo en la hoja Autenticación/autorización, seleccione Guardar para actualizar la configuración de la aplicación de funciones.

    Botón Guardar resaltado en la hoja Autenticación/autorización de una aplicación de funciones de Azure Portal.

  10. Después de guardar, seleccione Azure Active Directory en la sección Proveedores de autenticación.

    Proveedor de Azure Active Directory.

  11. Seleccione la Aplicación de Azure AD y luego copie el valor del Id. de cliente y péguelo en algún lugar para utilizarlo más adelante.

    Página Id. de cliente.

  12. Para confirmar que la API está protegida correctamente, abra una nueva ventana del explorador en modo privado y vaya hasta la API. La dirección URL de la aplicación de funciones se puede encontrar en la sección Información general de la hoja Aplicación de funciones. Si la configuración de autenticación se ha aplicado correctamente, debe redirigirse a la página de inicio de sesión de Microsoft Entra ID.

    Página de inicio de sesión de Microsoft Entra.

Creación de un conector personalizado para la aplicación de funciones de Azure

Para crear un conector personalizado que use autenticación de Microsoft Entra ID, debe crear un registro de aplicación de Microsoft Entra ID para proteger el conector personalizado y adquirir acceso delegado a la función de aplicación de Azure protegida por el registro de aplicación de Microsoft Entra ID que creó en la sección Protección de llamadas a aplicaciones de función de Azure mediante Microsoft Entra ID.

Creación de un registro de aplicación para el conector personalizado en Microsoft Entra ID

En primer lugar, cree una aplicación de Microsoft Entra ID para el conector personalizado. Esto es necesario para conceder al conector personalizado permiso para llamar a la aplicación de funciones de Azure.

  1. Vaya a la página Registros de aplicaciones en Azure Portal.

    Página Registros de Microsoft Entra ID en Azure Portal.

  2. En la lista de aplicaciones registradas, seleccione Nuevo registro.

    Botón Nuevo registro.

  3. Escriba un nombre para la aplicación, seleccione los tipos de cuenta y la configuración de plataforma admitidos (opcional) y, a continuación, seleccione Registrar.

    En Tipos de cuenta compatibles, seleccione Cuentas solo en este directorio organizativo. En Configuración de la plataforma, seleccione API web.

    Nota

    Para obtener más información sobre las opciones de registro de la aplicación, vaya a Inicio rápido: registrar una aplicación con la plataforma de identidad de Microsoft.

  4. Después de seleccionar el botón Registrar, aparecerán los permisos de API para el registro de la aplicación.

    Pantalla permisos de API.

  5. Seleccione Agregar permiso.

    Botón Agregar un permiso

  6. Seleccione la pestaña API usadas en mi organización, después, busque el nombre de la aplicación en el paso 7 de la sección Protección de llamadas a funciones de aplicación de Azure mediante Microsoft Entra ID. Cuando lo encuentre, seleccione el nombre de la aplicación.

    Importante

    El nombre de la aplicación será diferente del que aparece en la captura de pantalla.

    Nombre de la aplicación de funciones de Azure.

  7. Seleccione la casilla user_impersonation y seleccione Agregar permisos.

    Agregar permiso user_impersonation.

  8. Seleccione Certificados y secretos y seleccione Nuevo secretos de cliente.

    Certificados y secretos.

  9. Escriba una descripción para el secreto, seleccione un período de expiración y seleccione Agregar.

    Agregar un secreto de cliente.

  10. Se muestra el nuevo secreto. Copie y pegue el valor en alguna parte. Lo necesitará más adelante.

    Captura de pantalla que muestra el nuevo secreto en la sección Secretos de cliente.

  11. Seleccione Información general y, después, copie y pegue el valor del Id. de aplicación (cliente) en algún lugar. Lo necesitará más adelante.

    Captura de pantalla que muestra el valor de ID de la aplicación (cliente).

Mantenga esta página abierta para que pueda volver a ella. Hay un paso más en Azure Portal, pero primero debe crear un conector personalizado.

Creación de un conector personalizado

Ahora que está configurada la aplicación de Microsoft Entra ID, cree el conector personalizado. Para crear un conector personalizado debe describir la API a la que desea conectarse, de forma que el conector conozca las operaciones y las estructuras de datos de la API. Al crear funciones de aplicación de Azure para conectores personalizados, a menudo creará el conector de forma iterativa repitiendo los pasos siguientes:

  1. Creación, prueba y depuración de la aplicación de función de Azure localmente con Visual Studio Code.
  2. Implementación de la aplicación de funciones en Azure.
  3. Actualización de la configuración del conector personalizado para que se reflejen los cambios de la aplicación de funciones.

Postman es una herramienta popular para probar las API web. A menudo se usa para probar aplicaciones de funciones de Azure. En este artículo, creará un conector personalizado a partir de una colección de Postman. Se le proporcionará la colección de Postman.

Nota

Vaya al tema Creación de una colección de Postman para un conector personalizado para aprender a crear la suya propia. El uso de Postman para crear un conector personalizado es solo una opción. Vaya al tema Descripción de la API y definición del conector personalizado para conocer otras opciones.

  1. En una nueva pestaña del navegador, inicie sesión en Power Apps o Power Automate.

  2. Copie el código siguiente. Con el editor de texto que prefiera, cree un nuevo archivo y pegue el código como contenido del archivo. Guarde el archivo. Puede asignarle el nombre que prefiera, pero recuérdelo (por ejemplo, tutorial-custom-connector.json). Tendrá que utilizar este archivo en los pasos siguientes.

    {
        "id": "c4b5deba-f97b-47d0-82a5-a2b32561fb01",
        "name": "Custom Connector",
        "description": null,
        "auth": null,
        "events": null,
        "variables": [],
        "order": [
            "374365a1-ede5-4ead-8068-d878085dad26"
        ],
        "folders_order": [],
        "protocolProfileBehavior": {},
        "folders": [],
        "requests": [
            {
                "id": "374365a1-ede5-4ead-8068-d878085dad26",
                "name": "Hello",
                "url": "http://localhost:7071/api/Hello",
                "description": "",
                "data": [],
                "dataOptions": {
                    "raw": {
                        "language": "json"
                    }
                },
                "dataMode": "raw",
                "headerData": [
                    {
                        "key": "Content-Type",
                        "name": "Content-Type",
                        "value": "application/json",
                        "description": "",
                        "type": "text"
                    }
                ],
                "method": "POST",
                "pathVariableData": [],
                "queryParams": [],
                "auth": null,
                "events": null,
                "folder": null,
                "responses": [
                    {
                        "id": "46baba58-7b85-4a2e-8c7d-303080e08ba9",
                        "name": "Hello",
                        "status": null,
                        "mime": null,
                        "language": "plain",
                        "text": "Hello, Marc. This HTTP triggered function executed successfully.",
                        "responseCode": {
                            "code": 200,
                            "name": "OK"
                        },
                        "requestObject": {
                            "data": [],
                            "dataMode": "raw",
                            "dataOptions": {
                                "raw": {
                                    "language": "json"
                                }
                            },
                            "headerData": [
                                {
                                    "key": "Content-Type",
                                    "name": "Content-Type",
                                    "value": "application/json",
                                    "description": "",
                                    "type": "text"
                                }
                            ],
                            "method": "POST",
                            "pathVariableData": [],
                            "queryParams": [],
                            "url": "http://localhost:7071/api/Hello",
                            "rawModeData": "{\n\t\"name\": \"Marc\"\n}"
                        },
                        "headers": [
                            {
                                "key": "Date",
                                "value": "Wed, 04 Mar 2020 22:32:06 GMT"
                            },
                            {
                                "key": "Content-Type",
                                "value": "text/plain; charset=utf-8"
                            },
                            {
                                "key": "Server",
                                "value": "Kestrel"
                            },
                            {
                                "key": "Transfer-Encoding",
                                "value": "chunked"
                            }
                        ],
                        "cookies": null,
                        "request": "374365a1-ede5-4ead-8068-d878085dad26",
                        "collection": "c4b5deba-f97b-47d0-82a5-a2b32561fb01"
                    }
                ],
                "rawModeData": "{\n\t\"name\": \"Marc\"\n}",
                "headers": "Content-Type: application/json\n",
                "pathVariables": {}
            }
        ]
    }
    
  3. Expanda Datos en el panel izquierdo y luego seleccione Conectores personalizados.

    Captura de pantalla que muestra Conectores personalizados y de datos en el panel izquierdo.

  4. En la esquina superior derecha, seleccione Nuevo conector personalizado y, a continuación, seleccione Importar una colección de Postman.

    Importar una colección de Postman.

  5. Escriba un nombre para el conector, seleccione el botón Importar, busque el archivo que creó en el paso 2 y, a continuación, seleccione Continuar.

    Nombre y ubicación del archivo.

  6. Se abrirá la página General. Cambie el esquema a HTTPS, reemplace el valor de Host por el dominio de la aplicación de funciones y, finalmente, avance en el asistente hasta la página Seguridad.

    Opción Información general.

  7. En la página Seguridad, especifique la información de Microsoft Entra ID de la aplicación:

    Configuración de OAuth.

    Después de especificar la información de seguridad, seleccione el botón Actualizar conector para crear el conector personalizado.

  8. En la página Seguridad, el campo Redireccionar URL ahora contiene información. Copie esta URL para poder usarla en la siguiente sección de este tutorial.

    Nota

    Puede que tenga que desplazarse hacia abajo para ver la URL de redireccionamiento.

    Captura de pantalla que muestra el campo URL de redireccionamiento.

  9. En otra pestaña del navegador, regrese al registro de la aplicación que creó en la sección Creación de un registro de aplicación para el conector personalizado en Microsoft Entra ID. Compruebe que está en la sección Información general y, después, seleccione Agregar un URI de redirección.

    Captura de pantalla que muestra el botón URL Agregar un Redireccionamiento.

  10. Seleccione Agregar una plataforma.

    Botón Agregar una plataforma.

  11. En el panel Configurar plataformas, seleccione Web.

    Captura de pantalla que muestra Web en el panel Configurar plataformas.

  12. En el panel Configurar Web pegue el valor de URL de redireccionamiento del paso 7 y, a continuación, seleccione Configurar.

    Captura de pantalla que muestra el panal Configurar Web.

  13. Vuelva a la pestaña del explorador que contiene la configuración del conector personalizado. Debe estar en la página Seguridad del asistente.

  14. Para avanzar a la página Definición del asistente, seleccione la palabra Definición y revise.

    Captura de pantalla que muestra el botón Definición.

    Nota

    La definición procede de la colección de Postman que importó. Si cambió el código en el tutorial Inicio rápido: crear una función de C# en Azure con Visual Studio Code, el archivo de importación podría no coincidir con la forma de su API. Tendrá que crear una nueva colección de Postman o ajustar manualmente la acción en el conector personalizado. Para crear una nueva colección de Postman, use los vínculos compartidos anteriormente en este tutorial que puede encontrar aquí. Para ajustar manualmente la acción, puede revisar la sección Creación de la definición del conector del tutorial Creación de un conector personalizado desde cero.

Prueba del conector

Ahora que ha creado el conector, puede probarlo para asegurarse de que funciona correctamente. Actualmente, las pruebas solo están disponibles en Power Automate y Power Apps.

  1. Para pasar a la página Prueba del asistente, seleccione la palabra Prueba.

    Página Prueba.

  2. En la página Prueba, seleccione Nueva conexión.

    Captura de pantalla que muestra el botón Nueva conexión.

  3. Seleccione Crear y luego inicie sesión con su usuario de Microsoft Entra ID.

    Captura de pantalla que muestra el botón Crear y la pantalla de inicio de sesión.

  4. Vuelva a la página Prueba y realice una de las siguientes acciones:

    • En Power Automate, regresará a la página Prueba. Seleccione el icono de actualización para asegurarse de que se actualiza la información de la conexión.

      Actualizar conexión.

    • En Power Apps, accede a la lista de conexiones disponibles en el entorno actual. En el panel izquierdo, seleccione Conectores personalizados. Busque su conector personalizado y luego seleccione el icono de edición.

      Captura de pantalla que muestra la lista de conectores personalizados.

  5. Vuela a la página Prueba, escriba un valor en el campo nombre y, a continuación, seleccione Operación de prueba.

    Operación de prueba.

  6. Revise la solicitud y la respuesta.

    Captura de pantalla que muestra los campos de solicitud de Url, Method, Headers, ane Body.

    Captura de pantalla que muestra los campos de respuesta de Status, Method y Body.

Pasos siguientes

Ahora que ha creado un conector personalizado y ha definido su comportamiento, puede usar el conector.

Proporcionar comentarios

Agradecemos enormemente los comentarios sobre problemas con nuestra plataforma de conectores o nuevas ideas de características. Para enviar comentarios, vaya a Enviar problemas u obtener ayuda con los conectores y seleccione el tipo de comentario.