Creación de un conector personalizado para instancias de Azure Functions protegidas de Azure AD

Un principio clave de los conectores de Power Apps que usan Azure Active Directory (AAD) 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 AAD 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 AAD y, a continuación, ponerla a disposición de Power Apps como un conector personalizado.

Crear Azure Functions usando Visual Studio Code

Con Azure Functions, hay 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, Visual Studio, etc. En este tutorial, se utilizará C# y Visual Studio Code. Para completar este tutorial, primero debe completar el tutorial Inicio rápido: crear un proyecto de Azure Functions con Visual Studio Code. Anote el nombre que proporcionó para la aplicación de funciones en el paso Publicar el proyecto en Azure.

Importante

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

Protección de llamadas a Azure Functions mediante AAD

  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. En la sección superior, cambie a la pestaña Características de la plataforma.

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

  3. A continuación, en el grupo Redes, seleccione el vínculo Autenticación/autorización.

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

  4. En la hoja Autenticación/autorización, habilite la autenticación de App Service cambiando el botón de alternancia Autenticación de App Service a Activado.

    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.

    "Iniciar sesión con Azure Active Directory" resaltado 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, anote el valor del campo Crear aplicación y cópielo y péguelo en algún lugar para más adelante. Este valor representa el nombre de la aplicación de AAD que se usará para proteger la API. Usará este valor más adelante cuando configure el conector personalizado.

  8. Seleccione el botón Aceptar para confirmar la 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, después, 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 Azure AD.

    Página de inicio de sesión de Azure AD

Creación de un conector personalizado para Azure Functions

Para crear un conector personalizado que use autenticación de AAD, debe crear un registro de aplicación de AAD para proteger el conector personalizado y adquirir acceso delegado a la instancia de Azure Functions que protege dicho registro que creó en la sección Protección de llamadas a Azure Functions mediante AAD.

Creación de un registro de aplicación para el conector personalizado en AAD

En primer lugar, cree una aplicación de AAD para el conector personalizado. Esto es necesario para conceder al conector personalizado permiso para llamar a la instancia de Azure Functions.

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

    Página Registros de Azure AD en Azure Portal

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

    Botón Agregar

  3. Escriba un nombre para la aplicación, seleccione las opciones que se muestran en la siguiente captura de pantalla y, a continuación, seleccione el botón Registrar.

    Registrar un formulario de aplicación

    Nota

    Para obtener más información sobre las opciones de registro de la aplicación, consulte 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 el botón +Agregar un 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 Azure Functions mediante AAD. Cuando lo encuentre, haga clic en él.

    Importante

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

    Nombre de la aplicación de Azure Functions

  7. Seleccione la casilla user_impersonation y haga clic en el botón Agregar permisos.

    Agregar permiso user_impersonation

  8. Seleccione Certificados y secretos y luego seleccione el botón Nuevo secreto 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.

    Crear una clave

  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.

    Crear una clave

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 AAD, 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 Azure Functions para conectores personalizados, a menudo creará el conector de forma iterativa repitiendo los pasos siguientes:

  1. Creación, prueba y depuración de la función de Azure Functions con 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 funciones de Azure Functions. En este tema, creará un conector personalizado a partir de una colección de Postman. Se le proporcionará la colección de Postman.

Nota

Consulte el 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. Consulte el 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 siguiente código. 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. En el panel de navegación, seleccione Datos para expandirlo y, a continuación, Conectores personalizados.

    Conectores personalizados en el panel de navegación

  4. En la esquina superior derecha, seleccione Nuevo conector personalizado y, a continuación, 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 AAD 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.

    Dirección URL del recurso

  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 AAD. Compruebe que está en la sección Información general y, después, seleccione Agregar un URI de redirección.

    Dirección URL del recurso

  10. Seleccione el botón Agregar una plataforma.

    Botón Agregar una plataforma

  11. En el panel Configurar plataformas, seleccione Web.

    Configurar plataformas

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

    Configurar plataformas

  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.

    Configurar plataformas

    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 un proyecto de Azure Functions 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.

    Nueva conexión

  3. Seleccione el botón Crear y, a continuación, inicie sesión con el usuario de AAD.

    Nueva conexión

  4. Vuelva a la página Prueba.

    • En Power Automate, regresará a la página Prueba. Elija 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 de navegación, seleccione Conectores personalizados. Busque el conector personalizado y seleccione el icono de edición.

      Conectores personalizados en el panel de navegación

  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.

    Solicitud de conector

    Solicitud de conector

Pasos siguientes

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