Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
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:
- Cree un espacio de nombres y configure sus subrecursos.
- Habilite una identidad administrada en el espacio de nombres de Event Grid.
- Conceda a la identidad administrada acceso a la función o webhook de Azure.
- Configure los valores de webhook personalizados en el espacio de nombres de Event Grid.
- 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.
Implementaciones
Opción 1: implementación de Webhook mediante Azure Functions (Aplicación Microsoft Entra)
Azure Functions puede hospedar la lógica de webhook mediante Microsoft.Identity.Web para validar el token automáticamente. Se requiere un registro de aplicación de Microsoft Entra para la API de Webhook con el fin de validar los tokens de llamada de Event Grid, el cual debe contar con un URI del identificador de aplicación para la emisión de tokens. El lado cliente (Event Grid) ya tiene identidad administrada.
Ventajas:
- Sin infraestructura para administrar
- Asistentes de autenticación integrados (
Microsoft.Identity.Web) - Durable, escalable y rentable
La función debe realizar las siguientes operaciones:
- Validación del token del autor de la llamada desde la identidad administrada de Event Grid
- Validar el Json Web Token (JWT) del cliente
- Devolución de un JSON de permitir o denegar
Opción 2: Implementación de punto de conexión HTTPS externo
Esta implementación puede ser cualquier punto de conexión HTTPS externo (cualquier nube o cualquier back-end), utilizando la validación de JWT de Microsoft Entra ID con bibliotecas Microsoft.IdentityModel.
Use cualquier entorno de ejecución: .NET/Node/Java/Python.
Requisitos clave:
Debe ser HTTPS.
Debe validar el JWT del autor de la llamada
Debe validar el JWT del dispositivo
Debe responder dentro del tiempo de espera (se recomienda aproximadamente 5 segundos)
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
En la página de Información general de la aplicación, anote el valor de Id. de la aplicación (cliente).
En el menú de la izquierda, seleccione Exponer una API. Junto a URI de identificador de aplicación, seleccione Agregar.
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.
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.
Vaya a la aplicación de Azure Functions.
En el menú de la izquierda, seleccione Autenticación y, a continuación, seleccione Agregar proveedor de identidades.
En la página Añadir un proveedor de identidad, para Proveedor de identidad, seleccione Microsoft de la lista desplegable.
En la sección Registro de aplicaciones, especifique los valores de las siguientes propiedades:
En la sección Audiencias permitidas por token, introduzca las audiencias permitidas por token. Para ser específico, escriba el URI de identificador de aplicación de la aplicación Microsoft Entra que anotó anteriormente. La audiencia del token se usa para validar el token entrante de Event Grid.
En la sección Comprobaciones adicionales , siga estos pasos:
En la sección Configuración de autenticación de App Service , siga estos pasos:
Elija otras opciones de configuración en función de sus requisitos específicos y, a continuación, seleccione Agregar.
Generar y utilizar el token de ID de Microsoft Entra
Ahora, genere y use el token de id. de Microsoft Entra.
- Genere un token de identificación de Microsoft Entra usando la identidad administrada con el URI de identificador de aplicación (
api://<ClientID>) como recurso. - 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
Vaya a su espacio de nombres de Event Grid enAzure Portal.
En la página Espacio de nombres de Event Grid, seleccione Configuración en el menú de la izquierda.
En la sección Autenticación de webhook personalizado, especifique los valores de las siguientes propiedades:
- Tipo de identidad administrada: seleccione Usuario asignado.
- 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.
- 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.
- 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.
Selecciona Aplicar.
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
Azure Event Grid envía los siguientes encabezados en la solicitud al webhook:
**Authorization**: Bearer token
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 Privacy-Enhanced Mail (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. |
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 200 Bad Request
Content-Type: application/json
{
"decision": "deny",
"errorReason": "<string>"
}
Códigos de error:
| Resultado de la autenticación | Respuesta de la función | Código de razón MQTT de Event Grid |
|---|---|---|
| Denegación de autorización explícita | "decision": "deny" |
No autorizado |
| Token no válido o expirado | "decision": "deny" |
No autorizado |
| Tiempo de espera de la función | N/A | Servidor no disponible |
| Excepción de función / fallo | N/A | Servidor no disponible |
| Error transitorio de la plataforma | N/A | Servidor no disponible |
| Error interno de procesamiento del corredor | N/A | Servidor no disponible |
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.