Compartir a través de


Autenticación con el corredor MQTT mediante autenticación de webhook personalizada

Este artículo muestra cómo autenticarse con los espacios de nombres de Azure Event Grid mediante un webhook o una función de Azure.

La autenticación de webhooks permite que los puntos de conexión HTTP externos (webhooks o funciones) autentiquen las conexiones de transporte de telemetría de colas de mensajes (MQTT) de forma dinámica. Este método utiliza la validación de JSON Web Token de Microsoft Entra ID para garantizar un acceso seguro.

Cuando un cliente intenta conectarse, el intermediario invoca un punto de conexión HTTP definido por el usuario que valida las credenciales, como los tokens de Firma de acceso compartido, los nombres de usuario y las contraseñas, o incluso realiza comprobaciones de la lista de revocación de certificados. El webhook evalúa la solicitud y devuelve una decisión para permitir o denegar la conexión, junto con metadatos opcionales para la autorización específica. Este enfoque admite directivas de autenticación flexibles y centralizadas en diversas flotas de dispositivos y casos de uso.

Prerrequisitos

  • Un espacio de nombres de Event Grid con una identidad administrada asignada por el sistema o asignada por el usuario.
  • Un webhook externo o una función de Azure.
  • Acceso concedido a la identidad administrada del espacio de nombres de Event Grid a la función de Azure o webhook.

Pasos a nivel macro

Para usar la autenticación de webhook personalizada para los espacios de nombres, siga estos pasos:

  1. Cree un espacio de nombres y configure sus subrecursos.
  2. Habilite una identidad administrada en el espacio de nombres de Event Grid.
  3. Conceda a la identidad administrada acceso a la función o webhook de Azure.
  4. Configure los valores de webhook personalizados en el espacio de nombres de Event Grid.
  5. Conecte los clientes al espacio de nombres de Event Grid y autentíquese a través del webhook o la función.

Cree un espacio de nombres y configure sus subrecursos

Para crear un espacio de nombres y configurar sus subrecursos, siga las instrucciones de Inicio rápido: Publicación y suscripción a mensajes MQTT en un espacio de nombres de Event Grid con Azure Portal. Omita los pasos para crear un certificado y un cliente porque las identidades de cliente proceden del token proporcionado. Los atributos de cliente se basan en las notificaciones personalizadas del token de cliente. Los atributos de cliente se usan en la consulta del grupo de clientes, las variables de plantilla de tema y la configuración de enriquecimiento de enrutamiento.

Habilitación de una identidad administrada en el espacio de nombres de Event Grid

Para habilitar una identidad administrada asignada por el sistema en su espacio de nombres de Event Grid, use el siguiente comando:

az eventgrid namespace update --resource-group <resource group name> --name <namespace name> --identity "{type:systemassigned}" 

Para obtener información sobre cómo configurar las identidades asignadas al sistema y a los usuarios mediante Azure Portal, consulte Habilitar la identidad administrada para un espacio de nombres de Event Grid.

Concesión de acceso adecuado a la identidad administrada a una función o webhook

Conceda a la identidad administrada del espacio de nombres de Event Grid un acceso adecuado a la función de Azure de destino o al webhook.

Para configurar la autenticación personalizada para una función de Azure, siga los pasos siguientes.

Crear una aplicación de Microsoft Entra

  1. Cree una aplicación Microsoft Entra en Microsoft Entra ID.

  2. En la página de Información general de la aplicación, anote el valor de Id. de la aplicación (cliente).

    Recorte de pantalla que muestra la página de información general de una aplicación de Microsoft Entra ID con el id. de la aplicación (cliente) resaltado.

  3. En el menú de la izquierda, seleccione Exponer una API. Junto a URI de identificador de aplicación, seleccione Agregar.

  4. Anote el valor de URI de id. de la aplicación en el panel Editar URI de id. de la aplicación y, a continuación, seleccione Guardar.

    Recorte de pantalla que muestra el URI de identificación de la aplicación de Microsoft Entra.

Configuración de la autenticación para una función de Azure

Si tiene una función básica de Azure creada desde Azure Portal, configure la autenticación y valide el token de Microsoft Entra ID que se creó utilizando una identidad gestionada.

  1. Vaya a la aplicación de Azure Functions.

  2. En el menú de la izquierda, seleccione Autenticación y, a continuación, seleccione Agregar proveedor de identidades.

    Recorte de pantalla que muestra la página de autenticación.

  3. En la página Añadir un proveedor de identidad, para Proveedor de identidad, seleccione Microsoft de la lista desplegable.

  4. En la sección Registro de aplicaciones, especifique los valores de las siguientes propiedades:

    1. Id. de aplicación (cliente): introduzca el id. de cliente de la aplicación de Microsoft Entra que anotó anteriormente.

    2. Dirección URL del emisor: agregue la dirección URL del emisor con el formato https://login.microsoftonline.com/<tenantid>/v2.0.

      Recorte de pantalla que muestra la opción Agregar un proveedor de identidades con Microsoft como proveedor de identidades.

  5. Para Audiencias de token permitidas, añada el valor URI de id. de aplicación de la aplicación de Microsoft Entra que anotó anteriormente.

  6. En la sección Comprobaciones adicionales, para Desarrollo de aplicaciones cliente, seleccione Permitir solicitudes de aplicaciones cliente específicas.

  7. En el panel Aplicaciones cliente permitidas, introduzca el id. de cliente de la identidad administrada asignada por el sistema utilizada para generar el token. Puede encontrar este identificador en la aplicación empresarial del recurso de Microsoft Entra ID.

  8. Elija otras opciones de configuración en función de sus requisitos específicos y, a continuación, seleccione Agregar.

Ahora, genere y use el token de id. de Microsoft Entra.

  1. Genere un token de Microsoft Entra ID usando la identidad administrada con el URI de id. de aplicación como recursos.
  2. Use este token para invocar la función de Azure incluyándola en el encabezado de solicitud.

Configuración de la autenticación de webhook personalizada en el espacio de nombres de Event Grid

Configure los ajustes de autenticación de webhook personalizados en su espacio de nombres de Event Grid utilizando Azure Portal y la CLI de Azure. Primero se crea el espacio de nombres y, a continuación, se actualiza.

Uso de Azure Portal

  1. Vaya a su espacio de nombres de Event Grid enAzure Portal.

  2. En la página Espacio de nombres de Event Grid, seleccione Configuración en el menú de la izquierda.

  3. En la sección Autenticación de webhook personalizado, especifique los valores de las siguientes propiedades:

    1. Tipo de identidad administrada: seleccione Usuario asignado.
    2. Dirección URL del webhook: escriba el valor del punto de conexión de dirección URL donde el servicio de Event Grid envía solicitudes de webhook autenticadas mediante la identidad administrada especificada.
    3. URI de token de audiencia: introduzca el valor del id. de aplicación de Microsoft Entra o URI para obtener el token de acceso que se incluirá como token de portador en las solicitudes de entrega.
    4. Id. de inquilino de Microsoft Entra ID: escriba el valor del identificador de inquilino de Microsoft Entra que se usa para adquirir el token de portador para la entrega de webhook autenticada.
  4. Selecciona Aplicar.

    Captura de pantalla que muestra la configuración de la autenticación de webhook para un espacio de nombres de Event Grid.

Uso de la CLI de Azure

Para actualizar su espacio de nombres con la configuración de autenticación de webhook personalizada, use el siguiente comando:

az eventgrid namespace update \ 
    --resource-group <resource-group-name> \ 
    --name <namespace-name> \ 
    --api-version 2025-04-01-preview \ 
    --identity-type UserAssigned \ 
    --identity-user-assigned-identities "/subscriptions/XXXXXXXXXXX/resourcegroups/XXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/XXXXXXXXXXX={}" \ 
    --set properties.isZoneRedundant=true \ 
        properties.topicSpacesConfiguration.state=Enabled \ 
        properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.identity.type=UserAssigned \ 
        properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.identity.userAssignedIdentity="/subscriptions/XXXXXXXXXXX/resourcegroups/XXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/XXXXXXXXXXX" \ 
        properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.endpointUrl="https://XXXXXXXXXXX" \ 
        properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.azureActiveDirectoryApplicationIdOrUri="api://XXXXXXXXXXX/.default" \ 
        properties.topicSpacesConfiguration.clientAuthentication.webHookAuthentication.azureActiveDirectoryTenantId="XXXXXXXXXXX" 

Reemplace <NAMESPACE_NAME> y <RESOURCE_GROUP_NAME> por sus valores reales. Rellene los marcadores de posición de la suscripción, el grupo de recursos, la identidad, el id. de la aplicación, la URL y el id. del inquilino. Para mejorar el rendimiento y la fiabilidad de la autenticación basada en webhooks para el corredor MQTT de Event Grid, le recomendamos encarecidamente que habilite la compatibilidad con HTTP/2 para su punto de conexión de webhook.

Detalles de la API de webhook

Encabezados de solicitud

Autorización: token de portador

El token es un token de Microsoft Entra para la identidad administrada que se configuró para llamar al webhook.

Carga de solicitud

{
    "clientId": "<string>",
    "userName": "<string>",
    "password": "<base64 encoded bytes>",
    "authenticationMethod": "<string>",
    "authenticationData": "<base64 encoded bytes>",
    "clientCertificate": "<certificate in PEM format>",
    "clientCertificateChain": "<certificates from chain in PEM format>"
}

Descripciones de campos de carga

Campo Obligatorio/opcional Descripción
clientId Obligatorio Id. de cliente del paquete MQTT CONNECT.
userName Opcional Nombre de usuario del paquete MQTT CONNECT.
password Opcional Contraseña del paquete MQTT CONNECT en codificación Base64.
authenticationMethod Opcional Método de autenticación del paquete MQTT CONNECT (solo MQTT5).
authenticationData Opcional Datos de autenticación del paquete MQTT CONNECT en codificación Base64 (solo MQTT5).
clientCertificate Opcional Certificado de cliente en formato PEM.
clientCertificateChain Opcional Otros certificados proporcionados por el cliente necesarios para compilar la cadena desde el certificado de cliente al certificado de entidad de certificación.
userProperties Opcional Propiedades de usuario del paquete CONNECT (solo MQTT5).

Carga de respuesta

Respuesta exitosa

HTTP/1.1 200 OK 
Content-Type: application/json 

{ 
    "decision": "allow", 
    "clientAuthenticationName": "<string>", 
    "attributes": { 
        "attr": "<int/string/array_of_strings>", 
        ... 
    }, 
    "expiration": "<unix time format>" 
} 

Respuesta denegada

HTTP/1.1 400 Bad Request 
Content-Type: application/json 

{ 
    "decision": "deny", 
    "errorReason": "<string>" 
}

Descripciones de campos de respuesta

Campo Descripción
decision (obligatorio) La decisión de autenticación es allow o deny.
clientAuthenticationName Nombre de autenticación de cliente (nombre de identidad). (Obligatorio cuando decision se establece en allow).
attributes Diccionario con atributos. La clave es el nombre del atributo y el valor es un entero, cadena o matriz. (Opcional cuando decision se establece en allow).
expiration Fecha de expiración en formato de hora de Unix. (Opcional cuando decision se establece en allow).
errorReason Mensaje de error si decision está establecido en deny. Este error se registra. (Opcional cuando decision se establece en deny).

Ejemplos de tipos de atributos admitidos

"num_attr_pos": 1, 
"num_attr_neg": -1, 
"str_attr": "str_value", 
"str_list_attr": [ 
    "str_value_1", 
    "str_value_2" 
] 

Todos los tipos de datos correctos (número que se ajuste a <int32/string/array_of_strings>) se usan como atributos. En el ejemplo, las notificaciones num_attr_pos, num_attr_neg, str_attr y str_list_attr tienen tipos de datos correctos y se utilizan como atributos.